跳到主要内容

事件

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

自动日志

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

网卡链路不走事件:add_link_changed 能订阅、不报错,但不会触发(见 链路)。要链路读 diag_snapshot.link_up。

IO 质量走 add_io_status_changed。第一次读到 IOPS 只记基线,不回调。inputIopsHex 与 outputIopsHex 都缺则不虚构、不回调。非 GOOD 字节计数变化才回调。六种语言同一口径,不是每次读都回调。

功能概览​

类别事件说明自动日志
连接svc.events.add_connected_changed与 IO 控制器的周期交换通断✓
运行态svc.events.add_state_changed运行态变化✓
运行错误svc.events.add_error_occurred运行错误✓
IO 质量svc.events.add_io_status_changed非 GOOD 字节计数变化✓
链路svc.events.add_link_changed收不到,别订—
日志svc.events.add_logged上面每条事件都会再打这条—
危险
add_link_changed 订了也不会响

add_link_changed 能注册成功、不给任何报错,但回调不会被调用。订了之后一直没动静不能当成网卡一直是好的。请读 diag_snapshot.link_up。

连接​

add_connected_changed​

svc.events.add_connected_changed(callback)

周期数据交换通断时触发(connected == False 且 ever_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}"))

IO 质量​

add_io_status_changed​

svc.events.add_io_status_changed(callback)

第一次读到 IOPS 只记基线,不回调。inputIopsHex 与 outputIopsHex 都缺则不虚构、不回调。非 GOOD 字节计数变化才回调。不是每次读都回调。

回调参数:

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

链路​

svc.events.add_link_changed(callback)

能注册成功,但不会触发。要网卡链路请读 diag_snapshot.link_up。

回调参数:

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

日志​

add_logged​

svc.events.add_logged(callback)

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

回调参数:

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

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

示例:

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