mirror of
https://github.com/hansjone/netx.git
synced 2026-10-09 03:10:46 +08:00
Split UME alarm WebSocket consumer into state, log, subscription, and loop modules.
Keep the public facade stable and re-export shared mutable log/connection objects for existing tests. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
4ec890c407
commit
b866e33f81
5 changed files with 956 additions and 817 deletions
59
netx_api/ume_alarm_ws_state.py
Normal file
59
netx_api/ume_alarm_ws_state.py
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
"""Process-local mutable state for UME alarm WSS consumer."""
|
||||
from __future__ import annotations
|
||||
|
||||
from collections import deque
|
||||
import threading
|
||||
from typing import Any
|
||||
|
||||
from .ume_client import UMEClient
|
||||
|
||||
_WS_ALARM_ACTION_LABEL: dict[str, str] = {
|
||||
"inserted": "上报(新增)",
|
||||
"updated": "上报(更新)",
|
||||
"deleted": "清除",
|
||||
"skipped": "忽略",
|
||||
}
|
||||
|
||||
_WS_LOG_LOCK = threading.Lock()
|
||||
_WS_LOG_ENTRIES: deque[dict[str, Any]] = deque(maxlen=200)
|
||||
_WS_LOG_MAX_RETURN = 100
|
||||
|
||||
_LOG_DEDUP_LOCK = threading.Lock()
|
||||
_LOG_DEDUP_CACHE: dict[str, tuple[float, int]] = {}
|
||||
_LOG_DEDUP_MAX_KEYS = 256
|
||||
_WS_NOTIFY_LOCK = threading.Lock()
|
||||
_WS_NOTIFY_LAST_KEY = ""
|
||||
_WS_NOTIFY_LAST_TS = 0.0
|
||||
_WS_NOTIFY_COOLDOWN_S = 45.0
|
||||
_LOOP_STATUS_COOLDOWN_S = 60.0
|
||||
_WS_IGNORE_COOLDOWN_S = 60.0
|
||||
|
||||
_STARTUP_ALARM_SYNC_GATE = threading.Event()
|
||||
|
||||
_shutdown_lock = threading.Lock()
|
||||
_subscription_lock = threading.Lock()
|
||||
_ws_wake_event = threading.Event()
|
||||
_ws_connection_lock = threading.Lock()
|
||||
|
||||
_subscription_id: str = ""
|
||||
_subscription_uri: str = ""
|
||||
_subscription_topic: str = "ALARM"
|
||||
_active_client: UMEClient | None = None
|
||||
_ws_connection_state: str = "init"
|
||||
_ws_connection_detail: str = ""
|
||||
_ume_lost_lock = threading.Lock()
|
||||
_ume_subscription_lost = False
|
||||
_ume_subscription_lost_reason: str = ""
|
||||
|
||||
_WS_CONNECTION_LABELS: dict[str, str] = {
|
||||
"init": "初始化",
|
||||
"connected": "已连接",
|
||||
"connecting": "连接中",
|
||||
"disconnected": "已断开",
|
||||
"no_subscription": "无订阅",
|
||||
"waiting_token": "等待 token",
|
||||
"paused": "已暂停",
|
||||
"error": "连接异常",
|
||||
"reconnecting": "重连等待",
|
||||
"subscription_lost": "UME订阅已丢失",
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue