diff --git a/netx_api/main.py b/netx_api/main.py index f6c40df..6c33b2e 100644 --- a/netx_api/main.py +++ b/netx_api/main.py @@ -498,27 +498,27 @@ def ume_sync(payload: dict[str, Any] | None = None, db: Session = Depends(get_db return out -def _ume_sync_job_details_counts(row: UmeSyncJob) -> dict[str, int]: - """Parse ``details_json`` from sync jobs (inventory / alarms) for delete-reconcile stats.""" - out = {"deleted_inventory_ne": 0, "deleted_current_alarms": 0} +def _ume_sync_job_deleted_count(row: UmeSyncJob) -> int: + """Single reconcile delete count: inventory uses deleted_inventory_ne; current alarms uses deleted_stale_current_alarms.""" raw = str(getattr(row, "details_json", "") or "").strip() if not raw: - return out + return 0 try: obj = json.loads(raw) except Exception: - return out + return 0 if not isinstance(obj, dict): - return out + return 0 + inv = cur = 0 try: - out["deleted_inventory_ne"] = max(0, int(obj.get("deleted_inventory_ne") or 0)) + inv = max(0, int(obj.get("deleted_inventory_ne") or 0)) except Exception: pass try: - out["deleted_current_alarms"] = max(0, int(obj.get("deleted_stale_current_alarms") or 0)) + cur = max(0, int(obj.get("deleted_stale_current_alarms") or 0)) except Exception: pass - return out + return int(inv + cur) @app.get("/v1/ume/sync/status") @@ -538,7 +538,6 @@ def ume_sync_status( items = [] latest_by_domain: dict[str, dict[str, Any]] = {} for r in rows: - del_counts = _ume_sync_job_details_counts(r) item = { "id": int(r.id), "domain": str(r.domain or ""), @@ -547,8 +546,7 @@ def ume_sync_status( "pulled_count": int(r.pulled_count or 0), "inserted_count": int(r.inserted_count or 0), "updated_count": int(r.updated_count or 0), - "deleted_inventory_ne": int(del_counts["deleted_inventory_ne"]), - "deleted_current_alarms": int(del_counts["deleted_current_alarms"]), + "deleted": int(_ume_sync_job_deleted_count(r)), "error_message": str(r.error_message or ""), "started_at": (_ensure_utc(r.started_at) or datetime.now(timezone.utc)).isoformat(), "ended_at": (_ensure_utc(r.ended_at).isoformat() if r.ended_at else None), diff --git a/web/src/pages/UmePage.tsx b/web/src/pages/UmePage.tsx index 25f2764..d7e4a8b 100644 --- a/web/src/pages/UmePage.tsx +++ b/web/src/pages/UmePage.tsx @@ -241,8 +241,7 @@ export function UmePage() { pulled inserted updated - 删网元 - 删当前告警 + deleted started_at ended_at error @@ -257,8 +256,7 @@ export function UmePage() { {x.pulled_count} {x.inserted_count} {x.updated_count} - {Number(x.deleted_inventory_ne ?? 0)} - {Number(x.deleted_current_alarms ?? 0)} + {Number(x.deleted ?? 0)} {formatSystemTime(x.started_at)} {x.ended_at ? formatSystemTime(x.ended_at) : "-"} {x.error_message || "-"} @@ -266,7 +264,7 @@ export function UmePage() { ))} {!syncStatusQuery.isLoading && (syncStatusQuery.data?.items || []).length === 0 && ( - 暂无同步记录 + 暂无同步记录 )} diff --git a/web/src/types.ts b/web/src/types.ts index 6eaddf6..be83096 100644 --- a/web/src/types.ts +++ b/web/src/types.ts @@ -82,10 +82,8 @@ export type UmeSyncJobItem = { pulled_count: number; inserted_count: number; updated_count: number; - /** Reconcile deletes after full inventory snapshot (netx ume_sync_service). */ - deleted_inventory_ne?: number; - /** Reconcile deletes for current alarms after full snapshot. */ - deleted_current_alarms?: number; + /** Full-snapshot reconcile deletes (inventory: NE rows; alarms_current: current alarm rows). */ + deleted?: number; error_message?: string; started_at: string; ended_at?: string | null;