scan_state now accumulates log_lines per switch result. The status
bar is replaced with a dark terminal panel showing a summary header
[done/total ✓ok ✗fail | now: hostname] and a scrolling per-switch
log with green/red colouring and timestamps.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Patches Transport.auth_password at module load to default fallback=False,
ensuring each switch produces exactly one RADIUS/AD auth attempt instead
of two. Also moves the paramiko.transport import to module level.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Unreachable hosts are detected via a 3s socket connect on SSH_PORT
before any credentials are sent. Truly offline switches now fail
fast without touching RADIUS/AD at all.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Serialised logins now sleep `login_delay` seconds between each SSH
auth to prevent AD/LDAP lockout. Both max sessions (1-10) and login
delay (0-15s) are configurable via UI sliders in the header and
passed as JSON to all scan endpoints.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Only one SSH handshake/auth runs at a time via a module-level semaphore
to avoid RADIUS lockout. Up to 5 sessions can remain open concurrently
(down from 10) while commands run in parallel after login.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>