- 定义 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 配置
2.5 KiB
2.5 KiB
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 schema(config、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 class(execute、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 生成脚本)