1
0
Files

3.5 KiB
Raw Blame History

MODIFIED Requirements

Requirement: SQLite 数据库初始化

系统 SHALL 使用 Bun 内置 bun:sqlite 模块在配置的数据目录下创建 SQLite 数据库文件,并以 WAL 模式运行。数据库 schema MUST 支持 typed checker target 和结构化检查结果。

Scenario: 首次启动创建数据库

  • WHEN 指定的数据目录下不存在数据库文件
  • THEN 系统 SHALL 创建数据库文件并初始化包含 type、target、config、duration_ms、status_detail、failure 等字段的 targets 和 check_results 表

Scenario: 数据目录不存在

  • WHEN 配置的数据目录路径不存在
  • THEN 系统 SHALL 自动创建该目录

Scenario: 数据库已存在时启动

  • WHEN 数据库文件已存在
  • THEN 系统 SHALL 直接打开数据库,不重新建表

Requirement: targets 表同步

系统 SHALL 在启动时将 YAML 配置中的目标列表同步到 SQLite targets 表,并持久化 target 类型、展示摘要、领域配置、调度配置和 expect 配置。

Scenario: 首次同步目标

  • WHEN 数据库为空且 YAML 中定义了 N 个 typed target
  • THEN 系统 SHALL 将所有目标插入 targets 表,包含 name、type、target、config、interval_ms、timeout_ms 和 expect

Scenario: 配置变更后重新同步

  • WHEN YAML 配置发生变更(新增、删除或修改目标)后重启
  • THEN 系统 SHALL 根据 name 字段匹配:新增的插入、删除的移除、修改的更新

Requirement: check_results 表追加写入

系统 SHALL 将每次检查结果追加写入 check_results 表,不更新或删除已有记录。

Scenario: 写入检查结果

  • WHEN 一次 checker 执行完成
  • THEN 系统 SHALL 插入一条包含 target_id、timestamp、success、matched、duration_ms、status_detail、failure 的记录

Scenario: 写入结构化失败信息

  • WHEN checker 执行失败或 expect 不匹配
  • THEN 系统 SHALL 将首个失败原因序列化写入 failure 字段

Requirement: 聚合查询支持

数据存储 SHALL 支持按时间段聚合查询用于计算可用率、平均耗时、P99 耗时等统计指标。

Scenario: 计算目标可用率

  • WHEN 查询某目标在指定时间范围内的可用率
  • THEN 系统 SHALL 返回 UP (success=true AND matched=true) 的记录数占总记录数的百分比

Scenario: 计算目标平均耗时

  • WHEN 查询某目标在指定时间范围内的平均耗时
  • THEN 系统 SHALL 返回 duration_ms 的平均值(仅计算 success=true 的记录)

Scenario: 按小时聚合趋势数据

  • WHEN 查询某目标在指定时间范围内的趋势数据
  • THEN 系统 SHALL 返回按小时分组的聚合数据,包括每小时的平均耗时和可用率

ADDED Requirements

Requirement: 目标展示摘要持久化

数据存储 SHALL 为每个 target 持久化一个领域无关的展示摘要字段 target

Scenario: HTTP target 展示摘要

  • WHEN 同步 HTTP target
  • THEN targets.target SHALL 存储该 target 的 URL

Scenario: command target 展示摘要

  • WHEN 同步 command target +- THEN targets.target SHALL 存储由 exec 和 args 组成的命令摘要

Scenario: HTTP target config 序列化

  • WHEN 同步 HTTP target
  • THEN targets.config SHALL 存储 JSON包含 url、method、headers、body、maxBodyBytes

Scenario: command target config 序列化

  • WHEN 同步 command target
  • THEN targets.config SHALL 存储 JSON包含 exec、args、cwd、env、maxOutputBytes