## Purpose 定义历史拨测数据的自动清理机制:可配置的保留时长和定时清理调度。 ## Requirements ### Requirement: 数据保留配置 系统 SHALL 支持通过 `runtime.retention` 配置项指定历史数据保留时长,格式为持续时间字符串(`<数字><单位>`,单位支持 `d`/`h`/`m`)。 #### Scenario: 配置 7 天保留 - **WHEN** 配置文件中 `runtime.retention` 设置为 `"7d"` - **THEN** 系统 SHALL 保留最近 7 天的检查结果,清理更早的数据 #### Scenario: 配置小时级保留 - **WHEN** 配置文件中 `runtime.retention` 设置为 `"24h"` - **THEN** 系统 SHALL 保留最近 24 小时的检查结果 #### Scenario: 未配置 retention - **WHEN** 配置文件中未指定 `runtime.retention` - **THEN** 系统 SHALL 使用默认值 `"7d"` #### Scenario: 无效 retention 格式 - **WHEN** 配置文件中 `runtime.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** ProbeEngine.stop() 被调用 - **THEN** 系统 SHALL 清除清理定时器,不再执行后续清理 #### Scenario: retention 为 0 时不清理 - **WHEN** 配置的 retention 解析为 0 毫秒 - **THEN** 系统 SHALL 不注册清理定时器,数据永久保留