跳到主要内容

read_history_events

如果服务端记录事件历史 (HistoryRead Events), 客户端可以按时间区间拉历史事件.

配套

签名

def read_history_events(self,
node_id: str,
start_utc: datetime,
end_utc: datetime,
max_events: int = 0) -> List[HistoryEventArgs]: ...

node_id 通常是 i=2253 (Server 节点) 或自定义 EventNotifier 节点.

HistoryEventArgs

@dataclass
class HistoryEventArgs:
severity: int = 0
message: Optional[str] = None
source_name: Optional[str] = None
time: Optional[datetime] = None
event_type: Optional[str] = None

字段语义同 EventArrivedEventArgs, 但生命周期为返回列表存活期 (受托管化, 不需要 dispose).

内置使用 4 个标准 SelectClauses: Severity / Message / SourceName / Time.


用法

import datetime as dt

now = dt.datetime.now(dt.timezone.utc)
events = ua.read_history_events(
"i=2253",
start_utc=now - dt.timedelta(days=1),
end_utc=now)

for e in events:
print(f"[{e.severity}] {e.source_name}: {e.message} @ {e.time}")

自定义 EventFilter

如果想过滤 EventType / Severity, 当前 SDK 用内置 SelectClauses; 高级 EventFilter 待后续版本暴露.


服务端要求

  • 必须支持 HistoryRead Events (服务端 ServerCapabilities 标志位)
  • 事件源节点必须有 EventNotifier Attribute (12) bit 1 (HistoryRead) 置位

与实时事件订阅的关系

API拿什么
subscribe_events(...)实时事件 (订阅期间发生的)
read_history_events(...)历史事件 (服务端归档的)

通常组合用: 启动时 read_history_events 拉过去 24 小时, 然后 subscribe_events 接管实时.

下一步