Skip to the content.

采集状态机 - 快速参考

状态速查表

状态 采集行为 失败处理 成功处理
Online 每次采集 → Unstable (3+) 保持
Unstable 每次采集 → Quarantine (10+) → Online
Offline 按退避重试 ← 等待恢复 → Online
Quarantine 按指数退避 延长退避时间 → Online

快速调用

初始化

manager := core.NewCommunicationManageTemplate()
node := manager.RegisterNode("device1", "Device Name")

采集决策

if manager.ShouldCollect(node) {
    // 执行采集
    results, err := drv.ReadPoints(ctx, dev.Points)
}

结果处理

// 创建采集上下文
ctx := &core.CollectContext{
    TotalCmd:   len(dev.Points),
    SuccessCmd: len(results),
    FailCmd:    len(dev.Points) - len(results),
    PanicOccur: false,
}

// 最终裁决
manager.finalizeCollect(node, ctx)

状态查询

state := dm.GetDeviceState("device1")
fmt.Printf("State: %d, Failures: %d\n", state.State, state.FailCount)

状态转换触发条件

→ Online (恢复)

→ Unstable (降级)

→ Quarantine (隔离)

→ Offline (离线)

采集成功判定

成功率 = SuccessCmd / (SuccessCmd + FailCmd)

判定为"成功"的条件:
  ✓ 无 Panic
  ✓ 有交互 (TotalCmd > 0)  
  ✓ 成功率 >= 30%

否则判定为"失败"

常见问题速答

Q: 设备故障了会怎样?

采集1-2次失败  → Online 状态(等待诊断)
采集3-9次失败  → Unstable(5秒退避)
采集10+次失败  → Quarantine(指数退避,最长5分钟)
采集成功       → Online(立即恢复)

Q: 为什么采集被跳过了?

原因: 设备处于 Offline/Quarantine 状态且退避时间未过
解决: 等待 NextRetryTime 或手动干预

Q: 多少个命令失败才算采集失败?

只要成功率 >= 30%,就判定为成功
例: 10个命令,3个成功7个失败 → 30% 成功率 → 判定为成功

Q: 一次成功能恢复设备吗?

是的!OnSuccess() 会立即:
  - 重置 FailCount 为 0
  - 设置状态为 Online
  - 给设备快速恢复的机会

监控要点

// 需要监控的关键指标
state := dm.GetDeviceState("device1")

// 1. 设备状态
fmt.Printf("State: %d\n", state.State)  // 0=Online, 1=Unstable, 2=Offline, 3=Quarantine

// 2. 失败趋势
fmt.Printf("FailCount: %d\n", state.FailCount)  // 连续失败次数

// 3. 恢复能力
fmt.Printf("SuccessCount: %d\n", state.SuccessCount)  // 连续成功次数

// 4. 恢复预期
fmt.Printf("NextRetry: %v\n", state.NextRetryTime)  // 下次重试时间

告警设置建议

告警条件:
  ⚠️  State == Unstable AND FailCount > 5
  🔴 State == Quarantine AND Duration > 1分钟
  🔴 LastFailTime 距今 > 30分钟 AND State != Online

文件速查

文件 位置 说明
状态机实现 internal/core/node_status.go 核心状态机逻辑
设备管理 internal/core/device_manager.go 采集流程集成
单元测试 internal/core/node_status_test.go 测试用例
完整文档 STATE_MACHINE_API.md API 参考
集成指南 INTEGRATION_GUIDE.md 使用指南

最后更新: 2026-01-21 版本: 1.0.0 状态: ✅ 生产就绪