feat: 新增两个 OpenSpec 变更提案 — CMD Checker 增强与前端指标增强
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
## 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 返回空数组
|
||||
Reference in New Issue
Block a user