upsert_link now does a secondary fuzzy dedup by trailing port number
so 'Gi1/9' and '9' are treated as the same port on the same chassis
pair. Prevents duplicate edges when an Aruba and FS switch each report
the same cable using different port name formats.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Aruba/HP switches now connect with hp_procurve instead of cisco_ios,
fixing the 'terminal width 511' failure. Manufacturer is read from
NocoDB and mapped to the correct device type before SSH connect.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Dismiss button is now always visible with a bordered style instead of
hidden-until-JS. Netmiko error messages are truncated to first line
(120 chars) so verbose multi-line errors don't flood the log panel.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
TEMPLATES_AUTO_RELOAD=True so index.html volume-mount hot-reloads on
browser refresh without a container restart. Also: scan log persists
after scan with dismiss button when failures exist; slider renamed
from Sessions to Parallel with clarifying tooltip.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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>