3.2 KiB
3.2 KiB
MODIFIED Requirements
Requirement: 总览统计 API
系统 SHALL 提供 GET /api/summary 端点,返回所有目标的总体统计信息,包含异常事件计数。
Scenario: 获取总览统计
- WHEN 客户端请求
GET /api/summary - THEN 系统 SHALL 返回 JSON 包含 total(总目标数)、up(正常数)、down(异常数)、lastCheckTime(最近一次检查时间)、incidents24h(过去 24 小时内的异常事件数,按状态翻转计数)
Scenario: 异常事件计数逻辑
- WHEN 计算 incidents24h
- THEN 系统 SHALL 统计过去 24 小时内所有目标中 matched 从 1 变为 0 的状态翻转次数;时间窗口起始即为 matched=0 且无前序记录的情况 SHALL 计为 1 次事件
Requirement: 目标列表 API
系统 SHALL 提供 GET /api/targets 端点,返回所有 typed target 及其最新状态、分组信息和结构化采样数据,可用率基于 window 查询参数指定的时间窗口计算。
Scenario: 获取目标列表
- WHEN 客户端请求
GET /api/targets?window=24h - THEN 系统 SHALL 解析 window 参数(支持格式如 "24h"、"7d"),将其转换为时间范围,返回 JSON 数组,每个元素的 stats.availability 和 stats.totalChecks SHALL 基于该时间窗口的数据计算
Scenario: window 参数缺失
- WHEN 客户端请求
GET /api/targets未提供 window 参数 - THEN 系统 SHALL 默认使用 24h 时间窗口
Scenario: 目标无历史记录
- WHEN 某目标尚未执行过任何拨测
- THEN 其 latestCheck 为 null,recentSamples 为空数组,stats.availability 为 0
Requirement: 趋势 API 支持时间范围
系统 SHALL 提供 GET /api/targets/:id/trend 端点,返回包含延迟范围和正常检查数的趋势数据。
Scenario: 指定时间范围查询趋势
- WHEN 客户端请求
GET /api/targets/1/trend?from=ISO&to=ISO - THEN 系统 SHALL 返回指定时间范围内按小时分组的聚合数据,每个数据点包含 hour、avgDurationMs、minDurationMs、maxDurationMs、availability、totalChecks、upChecks
Scenario: from 或 to 参数缺失
- WHEN 客户端请求
GET /api/targets/1/trend未提供 from 或 to 参数 - THEN 系统 SHALL 返回 400 状态码和错误信息
Requirement: 新增共享类型
系统 SHALL 在 src/shared/api.ts 中定义扩展后的 SummaryResponse、TrendPoint 和 TargetStats 类型。
Scenario: SummaryResponse 类型
- WHEN 前后端共享
SummaryResponse类型 - THEN 该类型 SHALL 包含
total: number、up: number、down: number、lastCheckTime: string | null、incidents24h: number字段
Scenario: TrendPoint 类型
- WHEN 前后端共享
TrendPoint类型 - THEN 该类型 SHALL 包含
hour: string、avgDurationMs: number | null、minDurationMs: number | null、maxDurationMs: number | null、availability: number、totalChecks: number、upChecks: number字段
Scenario: TargetStats 类型
- WHEN 前后端共享
TargetStats类型 - THEN 该类型 SHALL 包含
availability: number、totalChecks: number字段(语义变更为基于时间窗口计算)