1
0
Files
DiAL/openspec/changes/enhance-frontend-metrics/specs/probe-data-store/spec.md

4.0 KiB
Raw Blame History

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 或 DOWNmatched=true 为 UPmatched=false 为 DOWN

Requirement: 目标统计查询支持时间窗口

getAllTargetStatsgetTargetStats 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 返回空数组