Show DSH alarm hub multi-subscriber status instead of OClaw single link.

Track per-connection metadata on the hub and surface it in the UME key-alert UI so operators can see which Netx Ops clients are subscribed.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
oliver 2026-09-10 16:57:42 +08:00
parent 0f8a06bfba
commit 5096117ad4
8 changed files with 328 additions and 46 deletions

View file

@ -1025,7 +1025,24 @@ const en = {
title: "AI alarm monitor",
showPanel: "Details",
hidePanel: "Close",
help: "Exact match by notificationId, or substring match on alarm description (case-insensitive; nativeProbableCause, etc.). Optionally restrict to UME inventory ne_type values (multi-select; empty = all devices). Pushed via OClaw WebSocket. Shares NETX_OCLAW_ANALYZE_TOKEN.",
help: "Exact match by notificationId, or substring match on alarm description (case-insensitive; nativeProbableCause, etc.). Optionally restrict to UME inventory ne_type values (multi-select; empty = all devices). Matched alerts are broadcast by NetX (server) to subscribed Netx Ops (DSH) clients.",
hub: "DSH subscribers",
hubConnected: "subscribed",
hubEmpty: "no subscribers",
hubSubscribers: "subscribers",
hubPublished: "published",
hubDeliverOk: "deliver ok",
hubDeliverFail: "deliver fail",
hubConnections: "Active connections",
hubColId: "id",
hubColUser: "user",
hubColRemote: "remote",
hubColClient: "client",
hubColConnected: "connected",
hubColLastSeen: "last seen",
hubEmptyConnections: "No Netx Ops clients are connected to the alarm hub",
hubPath: "path",
legacyOclaw: "Legacy OClaw outbound",
ws: "OClaw WSS",
wsConnected: "connected",
wsDisconnected: "disconnected",
@ -1046,7 +1063,7 @@ const en = {
neTypesEmpty: "No device types yet — sync Inventory first",
neTypesAll: "All",
forwardOnClear: "Push on alarm clear",
forwardOnClearHelp: "Global switch for all monitor rules. By default only new/updated alarms are pushed; when enabled, clear notifications are also sent when UME reports alarms cleared.",
forwardOnClearHelp: "Global switch for all monitor rules. By default only new/updated alarms are pushed; when enabled, clear notifications are also sent to subscribed Netx Ops clients.",
add: "Add rules",
adding: "Adding…",
delete: "Delete",

View file

@ -1017,7 +1017,24 @@ const zh = {
title: "AI 告警监控",
showPanel: "详情",
hidePanel: "关闭",
help: "按 notificationId 精确匹配,或按告警描述关键字模糊匹配(不区分大小写,匹配 nativeProbableCause 等字段);可选限定 UME Inventory 中的网元类型 (ne_type),不选则匹配全部设备。经 OClaw WebSocket 推送到 WhatsApp 群。鉴权与 NETX_OCLAW_ANALYZE_TOKEN 共用。",
help: "按 notificationId 精确匹配,或按告警描述关键字模糊匹配(不区分大小写,匹配 nativeProbableCause 等字段);可选限定 UME Inventory 中的网元类型 (ne_type),不选则匹配全部设备。命中后由 NetX 作为服务器广播给已订阅的 Netx Ops(DSH)客户端。",
hub: "DSH 订阅",
hubConnected: "有订阅",
hubEmpty: "无订阅",
hubSubscribers: "订阅数",
hubPublished: "已广播",
hubDeliverOk: "投递成功",
hubDeliverFail: "投递失败",
hubConnections: "当前连接",
hubColId: "连接 ID",
hubColUser: "用户",
hubColRemote: "远端",
hubColClient: "客户端",
hubColConnected: "连入时间",
hubColLastSeen: "最近心跳",
hubEmptyConnections: "当前没有 Netx Ops 客户端连入告警 hub",
hubPath: "路径",
legacyOclaw: "遗留 OClaw 出站",
ws: "OClaw WSS",
wsConnected: "已连接",
wsDisconnected: "未连接",
@ -1038,7 +1055,7 @@ const zh = {
neTypesEmpty: "暂无设备类型,请先同步 Inventory",
neTypesAll: "全部",
forwardOnClear: "告警清除时也推送",
forwardOnClearHelp: "全局开关:对所有监控规则生效。默认只在告警新增/更新时推送;勾选后,UME 上报告警已清除时也会向 WhatsApp 发送清除通知。",
forwardOnClearHelp: "全局开关:对所有监控规则生效。默认只在告警新增/更新时推送;勾选后,UME 上报告警已清除时也会向已订阅的 Netx Ops 推送清除通知。",
add: "添加规则",
adding: "添加中…",
delete: "删除",