1
0

feat: 新增 ICMP/Ping checker 设计提案

- 定义 ping target 配置:host、count、packetSize
- 定义 ping expect 断言:alive、maxPacketLoss、maxAvgLatencyMs、maxMaxLatencyMs
- 设计跨平台 ping 输出解析器(Linux/macOS/Windows 含多语言支持)
- 双重超时保障:ping 命令自身超时 + AbortSignal 兜底
- 扩展 checker-runner-abstraction spec 支持 ping checker 子进程控制
- 更新 probe-config spec 支持 ping type 配置
This commit is contained in:
2026-05-18 00:33:11 +08:00
parent 0a9a9016be
commit 393e8da5fd
7 changed files with 510 additions and 0 deletions

View File

@@ -0,0 +1,44 @@
## 1. 类型与 Schema 定义
- [ ] 1.1 创建 `src/server/checker/runner/icmp/types.ts`,定义 PingTargetConfig、PingExpectConfig、ResolvedPingConfig、ResolvedPingTarget、PingStats 接口
- [ ] 1.2 创建 `src/server/checker/runner/icmp/schema.ts`,定义 TypeBox schemaconfig、expect导出 icmpCheckerSchemas
## 2. 跨平台解析器
- [ ] 2.1 创建 `src/server/checker/runner/icmp/parse.ts`,实现 parsePingOutput(stdout, platform) 函数,支持 Linux/macOS/Windows 三平台解析
- [ ] 2.2 创建 `tests/server/checker/runner/icmp/parse.test.ts`,覆盖 Linux、macOS、Windows 英文、Windows 中文、全部丢包、无法解析等场景
## 3. 断言函数
- [ ] 3.1 创建 `src/server/checker/runner/icmp/expect.ts`,实现 checkAlive、checkPacketLoss、checkAvgLatency、checkMaxLatency 函数
- [ ] 3.2 创建 `tests/server/checker/runner/icmp/expect.test.ts`,覆盖各断言函数的通过和失败场景
## 4. 配置校验
- [ ] 4.1 创建 `src/server/checker/runner/icmp/validate.ts`,实现 validatePingConfig 语义校验
- [ ] 4.2 创建 `tests/server/checker/runner/icmp/validate.test.ts`,覆盖 host 缺失、count/packetSize 非法、未知字段等场景
## 5. Checker 主体实现
- [ ] 5.1 创建 `src/server/checker/runner/icmp/execute.ts`,实现 IcmpChecker classexecute、resolve、serialize、validate
- [ ] 5.2 创建 `src/server/checker/runner/icmp/index.ts`,导出 IcmpChecker
- [ ] 5.3 在 `src/server/checker/runner/index.ts` 中 import IcmpChecker 并将 `new IcmpChecker()` 添加到 checkers 数组
## 6. 集成测试
- [ ] 6.1 创建 `tests/server/checker/runner/icmp/execute.test.ts`,测试 IcmpChecker 的 execute 方法mock Bun.spawn
- [ ] 6.2 更新 `tests/server/checker/runner/registry.test.ts`,验证 ping type 已注册
- [ ] 6.3 更新 `tests/server/checker/config-loader.test.ts`,添加 ping target 配置解析和校验测试
## 7. Schema 导出与文档
- [ ] 7.1 更新 `probe-config.schema.json`,包含 ping target 和 expect 的 schema 片段
- [ ] 7.2 更新 `probes.example.yaml`,添加 ping checker 配置示例
- [ ] 7.3 更新 README.md添加 ping checker 说明和系统依赖ping 命令)注明
- [ ] 7.4 更新 DEVELOPMENT.md如有必要
## 8. 质量保障
- [ ] 8.1 执行完整测试套件bun test确保所有测试通过
- [ ] 8.2 执行代码检查lint和格式检查format确保无错误
- [ ] 8.3 验证 probe-config.schema.json 与运行期 schema 一致(运行 schema 生成脚本)