- 新增 server.listen (host/port)、server.storage (dataDir/retention)、 server.logging 分组 - 新增 probes.execution (maxConcurrentChecks) 分组,替代顶层 runtime - 旧配置入口 (runtime/logging/server.host/server.port/server.dataDir) 启动期拒绝 - 更新 types.ts、builder.ts、config-loader.ts 适配新路径 - 更新 probe-config.schema.json、probes.example.yaml、README.md、 DEVELOPMENT.md - 补充 config-loader 和 variables 测试覆盖新路径和旧入口拒绝 - 同步 5 个 delta specs 到主规范 (probe-config, config-variables, data-retention, probe-engine, runtime-logging) - 归档 openspec change reorganize-config-layout
2.1 KiB
2.1 KiB
Purpose
定义历史拨测数据的自动清理机制:可配置的保留时长和定时清理调度。
Requirements
Requirement: 数据保留配置
系统 SHALL 支持通过 server.storage.retention 配置项指定历史数据保留时长,格式为持续时间字符串(<数字><单位>,单位支持 d/h/m)。
Scenario: 配置 7 天保留
- WHEN 配置文件中
server.storage.retention设置为"7d" - THEN 系统 SHALL 保留最近 7 天的检查结果,清理更早的数据
Scenario: 配置小时级保留
- WHEN 配置文件中
server.storage.retention设置为"24h" - THEN 系统 SHALL 保留最近 24 小时的检查结果
Scenario: 未配置 retention
- WHEN 配置文件中未指定
server.storage.retention - THEN 系统 SHALL 使用默认值
"7d"
Scenario: 无效 retention 格式
- WHEN 配置文件中
server.storage.retention格式不合法(如"abc"、"7x") - THEN 系统 SHALL 在配置校验阶段报错,拒绝启动
Requirement: 定时清理调度
系统 SHALL 以固定间隔(1 小时)定期执行数据清理,删除超过保留时长的历史检查结果,并清理已无关联检查结果的非活跃目标行。
Scenario: 引擎启动后首次清理
- WHEN ProbeEngine 启动
- THEN 系统 SHALL 立即执行一次清理,然后每隔 1 小时再次执行
Scenario: 清理执行
- WHEN 清理定时器触发
- THEN 系统 SHALL 删除
check_results表中timestamp早于now - retentionMs的所有记录
Scenario: 清理空壳非活跃目标
- WHEN 清理定时器触发且 check_results 过期清理执行完毕
- THEN 系统 SHALL 删除
targets表中active = 0且在check_results表中不存在任何关联记录的目标行
Scenario: 引擎停止时清除定时器
- WHEN ProbeEngine.stop() 被调用
- THEN 系统 SHALL 清除清理定时器,不再执行后续清理
Scenario: retention 为 0 时不清理
- WHEN 配置的 retention 解析为 0 毫秒
- THEN 系统 SHALL 不注册清理定时器,数据永久保留