## MODIFIED Requirements ### Requirement: 数据库表结构 系统 SHALL 使用 SQLite 存储 targets 和 check_results 两张表。 #### Scenario: check_results 表结构 - **THEN** check_results 表 SHALL 包含 id(INTEGER PRIMARY KEY AUTOINCREMENT)、target_id(INTEGER NOT NULL)、timestamp(TEXT NOT NULL)、matched(INTEGER NOT NULL)、duration_ms(REAL)、status_detail(TEXT)、failure(TEXT)列,不包含 success 列 ### Requirement: 结果写入 系统 SHALL 将每次拨测结果插入 check_results 表。 #### Scenario: 插入结果记录 - **THEN** 系统 SHALL 插入一条包含 target_id、timestamp、matched、duration_ms、status_detail、failure 的记录 ### Requirement: 可用率计算 系统 SHALL 计算目标在指定时间范围内的可用率。 #### Scenario: 可用率定义 - **THEN** 系统 SHALL 返回 matched=true 的记录数占总记录数的百分比 #### Scenario: 平均耗时 - **THEN** 系统 SHALL 返回 duration_ms 的平均值(仅计算 matched=true 的记录) ### Requirement: 目标排序 系统 SHALL 按分组排序返回目标列表。 #### Scenario: 分组排序规则 - **WHEN** 查询目标列表 - **THEN** "default" 分组 SHALL 排在最前,其余分组 SHALL 按 YAML 配置中首次出现的顺序(即 id 自增顺序)排列 ### Requirement: 最近采样查询 系统 SHALL 提供获取目标最近 N 条采样记录的方法。 #### Scenario: 采样记录返回字段 - **THEN** 系统 SHALL 返回最多 N 条记录,每条包含 timestamp、duration_ms、matched ### Requirement: 汇总查询 系统 SHALL 提供全局汇总统计。 #### Scenario: UP/DOWN 判定 - **THEN** 系统 SHALL 基于 latestCheck.matched 判定目标 UP 或 DOWN:matched=true 为 UP,matched=false 为 DOWN