Commit graph

222 commits

Author SHA1 Message Date
3612dd6e45 Fix log audit record bug 2026-09-03 14:19:51 +08:00
f4ce8caf3e Harden WebCRT Enter audit so logged commands match the visible line.
Fix bare Enter re-audits, Tab expansion lag, and history mid-line edits by preferring the xterm/device row at Enter and rejecting empty-prompt snapshots.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-02 22:01:28 +08:00
fcef3b59ac Fix WebCRT command audit loss on merged stdin flush and early input.
Audit every completed stdin line per flush, keep a list of audit_line hints from the router, restore prompt enrichment and stdout fallback, and record actual bytes when hints disagree with what was sent.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-02 15:58:55 +08:00
302ebfac23 Tighten WebCRT command audit: reject device errors and stdout replay.
Only audit interactive commands from frontend audit_line with a CLI prompt prefix; skip prompt-sync Enter and device error echoes; join wrapped xterm rows for long commands.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-02 14:47:12 +08:00
52424dce37 Dedupe WebCRT command audit on double-fired Enter.
xterm and keydown can both emit carriage return for one keypress; skip duplicate Enter frames on the client and collapse identical audits within 450ms on the server.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-02 14:25:27 +08:00
7ca57278fe Skip WebCRT audit for empty Enter on prompt-only lines.
Do not reuse the previous command when the operator presses Enter on a blank prompt; validate prompt-only rows on both frontend and backend.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-02 11:37:06 +08:00
b35e56afb0 Prefer xterm visible line for WebCRT command audit on Enter.
PTY stdout/stdin carry backspace and edit noise during typing; record only the final row the operator sees when pressing Enter.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-02 11:13:41 +08:00
6ea14e6d5e Audit WebCRT commands from device stdout after tab completion.
ZTE tab redraws the input line via carriage return; parse the last prompt line from PTY stdout on Enter instead of stdin keystrokes. Also remove remaining ?? in AuditPage.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-02 10:53:15 +08:00
3fd1e9131d Record WebCRT commands from xterm visible line including prompt.
On Enter, send audit_line from the terminal row so tab completion and edits match what the operator executed; keep the device prompt prefix in audit logs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-02 09:58:48 +08:00
61531e524f Audit only intentional auth actions, not automatic 401/403 gates.
Stop recording unauthorized/forbidden/password-gate and silent refresh; keep login, logout, and failed-login style events.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-01 21:51:59 +08:00
d35d3992c2 Dedupe auth.unauthorized floods from unauthenticated page loads.
Keep one 401 audit per IP+path window, and hide historical unauthorized noise from the default business view.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-01 21:48:18 +08:00
ea3d45ddc2 Stop auditing successful auth.me and auth.sessions polls.
These are UI session checks that flooded the business audit view; keep failures only.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-01 21:44:52 +08:00
c181158209 Drop HTTP polling noise from operation audit by default.
Persist only business events and mutating/failed HTTP calls, and default the audit UI to a business view with an explicit HTTP filter.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-01 21:41:05 +08:00
8915455b52 Record WebCRT device login/commands and NE exec in operation audit.
Make session lifecycle and typed CLI lines searchable in audit_log with password redaction, and surface summaries plus device filters in the ops UI.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-01 21:36:44 +08:00
56569e49d1 Add topology NE create/connect flows and trim connect-test logs.
Bring full managed-NE create onto the canvas (keep placeholders), add single/multi connect test and multi discover links, split topology/managedNe dialogs into modules, and shorten redundant connectivity failure details.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-01 20:37:42 +08:00
f8d4a396f1 Fix ZTE hop false auth rejects by treating CLI prompt as success.
ZTE post-login banners can line-wrap login-failure stats and were misclassified before the target prompt was recognized.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-31 10:46:16 +08:00
fbf73cbaaf Disable target paging after hop login and keep CLI echo on timeouts.
LLDP discover and config collect were timing out on --More--; send vendor paging-off after nested/bastion auth, and attach session-log tails so failures show where the CLI stuck.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-29 12:30:33 +08:00
3adf8d8b75 Prefer vendor label for LLDP command when it conflicts with device_type.
Huawei NEs still tagged zte_zxros were getting show lldp neighbor brief and timing out; use display lldp neighbor and align UME inventory vendor before the jump.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-29 00:24:06 +08:00
b36174bfa4 Add explicit Huawei hop system-view option and startup column safety-net.
Some hops only accept stelnet in system-view; make it a saved yes/no setting (default off) instead of auto-retry, and always ALTER the new column on API boot when Alembic skips legacy DDL.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-28 23:58:05 +08:00
0a550abcb0 Fix Huawei WebCRT hop login echo doubling and safer Change-now handling.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-28 23:34:15 +08:00
6aedd2c522 Fix WebCRT connect crash from invalid Netmiko session_log wrapper.
Use a BytesIO subclass for live connect echo so Netmiko accepts the log object again.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-28 21:55:20 +08:00
6ed08e24de Stream WebCRT login live and unblock Huawei hop interactive connect.
Skip Huawei special_login_handler under interactive WebCRT, harden stelnet host-key auth, and echo hop/login progress into the terminal during connect.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-28 21:41:36 +08:00
hansjone
6901a7c019 Fix Huawei stelnet hop auth hanging on host-key [Y/N] prompts.
Answer Continue/Save-key prompts during CLI-hop secondary auth so WebCRT terminal login no longer times out after connectivity passes.
2026-08-28 21:13:29 +08:00
b81e5869a6 Ship gated eye polish, fabric levels, and collection UI refresh.
Topology MCP adds pull/compact/bundle/suggest-hubs with a no-template skill path; API gains fabric level and NE collection policy; web list pages get paging and denser collect/network workflows.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-12 16:13:05 +08:00
54ca265430 Retry ZTE prompt wait with RETURN after login banner timeout.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 19:22:56 +08:00
b4514c13aa Support bastion hop hosts as FQDN and pasted OpenSSH destinations.
Use placeholder examples (example.com / RFC5737) in docs and tests.
EOF

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 17:36:45 +08:00
b6a579ec02 Skip CLI startup when device credentials are incomplete.
Reject non-interactive CLI work early across exec, LLDP, config sync, collection, traffic, and connect-test flows so tasks record a clear reason instead of launching a doomed session.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 15:11:59 +08:00
dcdf4147a6 Add LLDP collect retry for failed and weak-evidence NEs.
Mirror config-sync retry_failed so operators can re-collect hard failures and empty/stub LLDP results without re-running the full scope.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 11:25:57 +08:00
527472976a Fix topology sync failing when ume_topo_link ifname columns are missing.
Ensure startup safety-net adds a_ifname/z_ifname on brownfield DBs, and normalize ADD COLUMN IF NOT EXISTS for SQLite tests.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 09:34:07 +08:00
9ba4d051dc Add concurrent multi-NE CLI exec batch for field sweeps.
execManagedNe can take ne_ids/ume_ne_ids/targets and POST /v1/managed-ne/exec-batch so many show commands run in parallel instead of serial one-NE MCP loops.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-10 23:34:19 +08:00
78d174232d Improve UME ops triage APIs and slim fabric path payloads.
Add severity/time filters, exclude missing hosts from aggregates, and default topology paths to compact summary fields for MCP-friendly alarm triage.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-10 22:17:45 +08:00
e4a135ec16 Fix fabric path search, read scope, orbit total ranking, and edge menu clamp.
Prefer BFS shortest paths, allow ne:read on path find, honor objective=total clearance trades, and keep context menus on-screen without a11y clock spam.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-10 21:31:50 +08:00
298859e608 add topology tool 2026-08-10 20:29:05 +08:00
75d03f5f9b Raise physical canvas capacity and keep region==canvas rules consistent.
Pass view kind into membership so metro maps are not capped at core=80, add region-scoped neighbor projection, and align UI/tests with one physical canvas per region.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-09 23:23:09 +08:00
4b7d13d62b Unify directory NE badges as distinct fabric ids across membership and home.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-07 18:16:21 +08:00
137597cd25 Harden UME/LLDP link ports and canvas styles around UME authority.
Resolve ports from EQ+PTP first, enrich from LLDP when compatible, miss only on valid LLDP evidence, and paint UME solid blue / LLDP dashed / missing red. Also localize new root maps as Root map in English.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-07 16:33:25 +08:00
77832b271d Align folder permissions: roots deletable, root maps rename-only, world map locked.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-07 14:48:22 +08:00
1b592490a5 Protect root maps and auto world map; only sub-regions are deletable.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-07 14:41:06 +08:00
8fa4b2e4ea Allow deleting UME-synced sub-regions like manual regions.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-07 14:31:09 +08:00
fdab188cc1 Render world map overview as a screen-space starfield and rename it to 世界地图.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-07 11:02:23 +08:00
8444d85005 Heal UME dock-to-Fabric gaps: partial jobs, startup apply, and one-click UI.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-07 10:33:25 +08:00
35a3980dc0 Heal legacy single-map roots into 根/根图 on tree bootstrap.
Old installs hung the canvas on the top-level region; migrate those views under a system root map so tree load and create-root keep working.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-07 09:31:23 +08:00
c4911b6ddc Add Google-Earth style world-map LOD with 1:1 coords and sticky tiles.
Keep visited regions when panning, prefetch detail on search locate with a gold flashing target highlight, and shrink default NE icons so dense UME layouts stay readable.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-07 03:57:24 +08:00
48b10656d2 Unify manual topology roots with UME World: auto root map, and fix empty UME canvas.
Top-level folders are nav-only with a unique system root map; UI drops custom/extra L2 creates. Batched dock-to-Fabric apply avoids PG lock OOM so World NEs can render, with subtree region counts restored.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-07 02:22:58 +08:00
1ef43fdcd4 Unify UME World as hex nav with conditional flat world map.
Seed a unique L2 World canvas under the UME World container, show the flat map only when nested regions have NEs, pack blocks without overlap, allow drag overrides on the world map while forbidding direct NE adds, and hide the world-map truncation banner.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-07 00:51:08 +08:00
5d705fa7bb Parse onsite UME TopoNode FDN names when nodeId is missing.
Live TopoNodes use MD=...;ME=<uuid> / SBN=<uuid> without nodeId; extract those uuids as stable PKs and parent refs so reconcile drops old name:hash rows.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-06 19:33:16 +08:00
4fcec36514 Fix UME topology sync stuck running and unique-key flush failures.
Use savepoint upserts with payload dedupe, finalize jobs on a fresh sibling session, serialize concurrent topology syncs, and reap stale running rows so the scheduler does not keep spawning orphans.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-06 18:42:02 +08:00
fe483f51cc Add UME TopoNodes/TopologicalLinks daily sync into local tables.
Phase-1 docks both topology APIs without writing Fabric; expose a 24h topology_auto_sync task and domain=topology manual sync for later LLDP alignment.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-06 18:17:45 +08:00
db8c77a2e5 Treat UME stream handshake 500 as a lost subscription.
Stop infinite reconnect loops when ZTE returns HTML 500 for a dead stream id and surface re-establish in the UI.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-06 16:19:14 +08:00
20c2fcd496 Harden auth with revocable sessions, cookies, and single-login default.
Issue short-lived access JWTs backed by AuthSession rows, HttpOnly cookies with refresh rotation, idle timeout, session management UI, WebCRT ownership caps, and optional Redis login rate limits; new logins revoke other sessions by default.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-06 14:13:37 +08:00