跳到主要内容

事件

通过 svc.events 订阅运行态事件。

自动日志

每个事件触发时都会再打 add_logged(等级跟随源事件),无论是否另订了对应事件。绑 add_logged 即可收到中文消息。

IOPS 和网卡链路都不走事件add_io_status_changed / add_link_changed 能订阅、不报错,但永远不会触发(见 收不到的两个)。要 IOPS 读 io_status,要链路读 diag_snapshot.link_up

功能概览

类别事件说明自动日志
连接svc.events.add_connected_changed与 IO 控制器的周期交换通断
运行态svc.events.add_state_changed运行态变化
运行错误svc.events.add_error_occurred运行错误
IOPSsvc.events.add_io_status_changed收不到,别订
链路svc.events.add_link_changed收不到,别订
日志svc.events.add_logged上面每条事件都会再打这条
这两个订了也不会响

add_io_status_changedadd_link_changed 都能注册成功、不给任何报错,但回调一次都不会被调用

所以「订了之后一直没动静」不能当成「IOPS 一直是好的」,也不能当成「网卡一直是好的」。这两样请轮询 io_statusdiag_snapshot.link_up

连接

add_connected_changed

svc.events.add_connected_changed(callback)

周期数据交换通断时触发(connected == Falseever_connected == True = 掉线;ever_connected == False = 从未连上)。

回调参数:

class PnSConnectedChangedEvent:
connected: bool # 当前是否在换周期数据
ever_connected: bool # 是否曾经连上过
level: PnSEventLevel # 连接 = Info;掉线 / 从未连上 = Warn

示例:

def on_connected(e):
if not e.connected and e.ever_connected:
print("掉线")

svc.events.add_connected_changed(on_connected)

运行态

add_state_changed

svc.events.add_state_changed(callback)

运行态变化时触发(SDK 只观测,不主动切状态)。

回调参数:

class PnSStateChangedEvent:
old_state: Any # 变化前,见 [PnSState](./api#pnsstate)
new_state: Any # 变化后
level: PnSEventLevel # Info

示例:

svc.events.add_state_changed(lambda e: print(f"{e.old_state}{e.new_state}"))

add_error_occurred

svc.events.add_error_occurred(callback)

运行错误出现时触发;e.error_code 是 int 原值,枚举形态请用 svc.error_code

回调参数:

class PnSErrorOccurredEvent:
error_code: int # 运行错误原值(不是枚举)
message: str # 中文消息
level: PnSEventLevel # Warn

示例:

svc.events.add_error_occurred(lambda e: print(f"{e.error_code}: {e.message}"))

收不到的两个

add_io_status_changedadd_link_changed 能通过编译、能注册成功,但永远不会触发 —— 派发它们的观测路径没有调用方。列在这里只为了对照:在 API 里看见这两个名字时,别指望回调。

add_io_status_changed

svc.events.add_io_status_changed(callback)

回调参数:(当前不会被调用)

class PnSIoStatusChangedEvent:
iops_bad: int # IOPS 非 GOOD 的字节数(status != 0x80)
level: PnSEventLevel # BAD > 0 = Warn;否则 Info

要 IOPS 质量请轮询 io_status

svc.events.add_link_changed(callback)

回调参数:(当前不会被调用)

class PnSLinkChangedEvent:
link_up: bool # 物理链路是否 Up
level: PnSEventLevel # Up = Info;Down = Warn

要网卡链路请读 diag_snapshot.link_up

日志

add_logged

svc.events.add_logged(callback)

每个事件触发时都会再打这条,等级跟随源事件。

回调参数:

  • level (PnSEventLevel) — 日志级别
  • message (str) — 日志正文
PnSEventLevel

日志级别。取值见 枚举参考

示例:

svc.events.add_logged(lambda level, message: print(f"[{level.name}] {message}"))