aiohttp hung on KeenDNS from VPS while httpx works (keenetic-unified
pattern). Align add/import/bulk URL parsing with parse_keenetic_web_url.
Co-authored-by: Cursor <cursoragent@cursor.com>
Resetting the session after auth dropped cookies and broke metrics
collection with "No data from router" despite successful login.
Co-authored-by: Cursor <cursoragent@cursor.com>
Probing used short timeouts on the session reused for RCI calls.
Recreate the session after auth and treat 503 as transient.
Co-authored-by: Cursor <cursoragent@cursor.com>
KeenDNS returns multiple A records including unreachable IPs; aiohttp
was timing out on the first bad address. Iterate all resolved IPs with
short connect timeouts, serialize polls with a lock, and fail faster.
Co-authored-by: Cursor <cursoragent@cursor.com>
Run refresh-all in background so API stays responsive during 24-router
poll. Cap per-device poll at 75s, add 2s gap between routers, bump
KeenDNS connect/read timeouts.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add PATCH endpoint and inline card editor to update web_url and host,
with URL validation and automatic refresh after save.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use web_url scheme and host:port for API base URL instead of
forcing https. Force IPv4 in aiohttp to avoid IPv6 hangs on
KeenDNS. Sync canonical 24-router list with Russian names.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add web_url/anydesk to router records, host fallback for Web button
on offline cards, cache-bust app.js, and scripts to sync import list.
Co-authored-by: Cursor <cursoragent@cursor.com>