Support composite-username bastion login for automated connect-test and exec, with bastion-managed or manual target credential modes.
Co-authored-by: Cursor <cursoragent@cursor.com>
Persist full connect test logs (connect_detail) with NE UI detail modal.
Add Huawei/Cisco jump CLI templates and generic CLI hop session path.
Probe Cisco hostname via show configuration | include hostname (60s timeout).
Co-authored-by: Cursor <cursoragent@cursor.com>
Add hop fields and encrypted credentials, unified Netmiko session factory with ZTE ssh/telnet CLI templates and secondary auth, wire connect/collect paths, and NE management UI with auto-suggested jump commands.
Co-authored-by: Cursor <cursoragent@cursor.com>
Introduce workbench operations for multi-vendor NE CRUD/connect-test and Netmiko batch collection with job lifecycle controls, log downloads, and paginated run filters.
Co-authored-by: Cursor <cursoragent@cursor.com>
Show inventory/alarms schedulers as running with DB last_run_at during debounce; English interval labels; subscription help on ? click.
Co-authored-by: Cursor <cursoragent@cursor.com>
Detect missing UME subscriptions from WSS/DELETE errors, stop stale reconnects, and prompt to clear local state before re-establishing.
Co-authored-by: Cursor <cursoragent@cursor.com>
Sort UME current alarms by time_created descending (newest first) with last_seen_at and alarm_key as tie-breakers to keep offset/limit pagination stable. Apply the same default ordering in the MCP tool listing.
Co-authored-by: Cursor <cursoragent@cursor.com>
Log startup exceptions for UME scheduler threads and set runtime task status to error with startup_thread_init_failed details instead of silently swallowing exceptions. This prevents tasks from staying in init without actionable diagnostics.
Co-authored-by: Cursor <cursoragent@cursor.com>
Store UME alarm payload fields as TEXT and run startup ALTER COLUMN upgrades so large alarm records no longer fail with StringDataRightTruncation. Keep full values during sync while hashing only pathological ultra-long alarm keys to preserve idempotent primary keys.
Co-authored-by: Cursor <cursoragent@cursor.com>
- Use last ended_at (done or failed) for debounce; remove duplicate time.sleep after sync\n- On startup mark running+no ended_at jobs failed (crash/interrupt) so interval logic is not fooled\n- Log marker page progress every 25 pages\n- Log when alarm/inventory scheduler threads start
Co-authored-by: Cursor <cursoragent@cursor.com>
- _reset_runtime_pause_flags() after create_all so pause state cannot survive process restart in memory\n- Before each alarms/inventory auto sync, wait until interval elapsed since last status=done job ended_at (any trigger); honor pause during wait\n- Helps avoid immediate duplicate sync on restart when DB was recently updated
Co-authored-by: Cursor <cursoragent@cursor.com>
Makes schedule attempts visible in ume_sync_jobs while HTTP pagination runs; log iteration/sleep/finish for alarms_current and inventory auto loops.
Co-authored-by: Cursor <cursoragent@cursor.com>
Avoid stale last_run_at when sync_alarms_current runs longer than interval; clarifying tooltip on UME page.
Co-authored-by: Cursor <cursoragent@cursor.com>
- keepalive: call renew when has_token and (expires_in<=0 or below renew_before) so 0s stuck state self-heals\n- alarms/inventory auto loops: set last_error while pulling so table is not stuck at init with no hint\n- UmePage: warn pills for connected+需续期, spinners on token actions, toast ok/err from App, invalidate sync status after token ops
Co-authored-by: Cursor <cursoragent@cursor.com>
GET /v1/ume/alarms accepts host_name (contains on inventory); ne_id query kept for API clients. Web uses host_name field and link on host column.
Co-authored-by: Cursor <cursoragent@cursor.com>
API GET /v1/ume/sync/status exposes deleted only (sum of inventory NE + current-alarm reconcile counts from details_json). UI one column.
Co-authored-by: Cursor <cursoragent@cursor.com>
Drop ume_inventory_equipment_holder on startup; remove ORM model and sync/reconcile paths. Sync status API/UI no longer expose deleted_inventory_holders. Nested holder data remains in ne raw_json if UME returns it.
Co-authored-by: Cursor <cursoragent@cursor.com>
Parse UmeSyncJob.details_json in GET /v1/ume/sync/status for deleted_inventory_ne, deleted_inventory_holders, deleted_stale_current_alarms. Add table columns on UmePage and types.
Co-authored-by: Cursor <cursoragent@cursor.com>
Set up netx as a standalone git-managed project with isolated Python dependencies, alarm ingestion/query APIs, oclaw bridge integration, and ops-focused UI enhancements including history and raw field access.
Co-authored-by: Cursor <cursoragent@cursor.com>