4.0 KiB
4.0 KiB
MODIFIED Requirements
Requirement: 聚合查询支持
数据存储 SHALL 支持按时间段聚合查询,用于计算可用率、平均耗时、延迟范围等统计指标。所有聚合查询 SHALL 支持时间窗口参数。
Scenario: 计算目标可用率(带时间窗口)
- WHEN 查询某目标在指定时间范围内的可用率
- THEN 系统 SHALL 返回该时间范围内 matched=1 的记录数占总记录数的百分比
Scenario: 计算目标平均耗时
- WHEN 查询某目标在指定时间范围内的平均耗时
- THEN 系统 SHALL 返回 duration_ms 的平均值(仅计算 matched=1 的记录)
Scenario: 按小时聚合趋势数据(含延迟范围)
- WHEN 查询某目标在指定时间范围内的趋势数据
- THEN 系统 SHALL 返回按小时分组的聚合数据,包括每小时的 avgDurationMs、minDurationMs(成功检查的最小延迟)、maxDurationMs(成功检查的最大延迟)、availability、totalChecks、upChecks
Scenario: UP/DOWN 判定
- THEN 系统 SHALL 基于 latestCheck.matched 判定目标 UP 或 DOWN:matched=true 为 UP,matched=false 为 DOWN
Requirement: 目标统计查询支持时间窗口
getAllTargetStats 和 getTargetStats SHALL 接受可选的时间窗口参数,限制聚合的数据范围。
Scenario: 带时间窗口的批量统计
- WHEN 调用
getAllTargetStats(from, to) - THEN 系统 SHALL 仅聚合 timestamp 在 from 到 to 范围内的 check_results 记录
Scenario: 不传时间窗口
- WHEN 调用
getAllTargetStats()不传时间参数 - THEN 系统 SHALL 默认使用过去 24 小时作为时间窗口
Scenario: 带时间窗口的单目标统计
- WHEN 调用
getTargetStats(targetId, from, to) - THEN 系统 SHALL 仅聚合指定时间范围内的记录
Requirement: 趋势数据时间范围查询
系统 SHALL 支持按任意时间范围查询趋势聚合数据,返回包含延迟范围和正常检查数的完整聚合。
Scenario: 按时间范围查询趋势(含延迟范围)
- WHEN 查询指定 target 在 from 到 to 时间范围内的趋势数据
- THEN 系统 SHALL 返回按小时分组的聚合数据,每个数据点包含 hour、avgDurationMs、minDurationMs、maxDurationMs、availability、totalChecks、upChecks
ADDED Requirements
Requirement: 异常事件计数查询
ProbeStore SHALL 提供 getIncidents24h() 方法,统计过去 24 小时内所有目标的异常事件数。
Scenario: 计算异常事件数
- WHEN 调用
getIncidents24h() - THEN 系统 SHALL 统计过去 24 小时内所有目标中 matched 从 1 变为 0 的状态翻转次数
Scenario: 窗口起始即为故障
- WHEN 某目标在 24 小时窗口内第一条记录为 matched=0 且窗口前无记录
- THEN 该故障 SHALL 计为 1 次事件
Scenario: 连续异常只计一次
- WHEN 某目标连续 10 次 matched=0
- THEN 该连续异常段 SHALL 仅计为 1 次事件
Requirement: 目标延迟百分位查询
ProbeStore SHALL 提供 getTargetDurations(targetId, from, to) 方法,返回时间窗口内所有成功检查的 duration_ms 数组。
Scenario: 获取延迟数据
- WHEN 调用
getTargetDurations(targetId, from, to) - THEN 系统 SHALL 返回该目标在时间范围内所有 matched=1 的 duration_ms 值数组,按升序排列
Scenario: 无成功检查
- WHEN 时间窗口内无 matched=1 的记录
- THEN 系统 SHALL 返回空数组
Requirement: 目标故障段查询
ProbeStore SHALL 提供 getCheckSequence(targetId, from, to) 方法,返回时间窗口内的检查序列用于故障分析。
Scenario: 获取检查序列
- WHEN 调用
getCheckSequence(targetId, from, to) - THEN 系统 SHALL 返回该目标在时间范围内所有检查记录的
{ timestamp: string, matched: number }数组,按 timestamp 升序排列
Scenario: 无检查记录
- WHEN 时间窗口内无记录
- THEN 系统 SHALL 返回空数组