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

3.2 KiB
Raw Blame History

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 为 nullrecentSamples 为空数组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 中定义扩展后的 SummaryResponseTrendPointTargetStats 类型。

Scenario: SummaryResponse 类型

  • WHEN 前后端共享 SummaryResponse 类型
  • THEN 该类型 SHALL 包含 total: numberup: numberdown: numberlastCheckTime: string | nullincidents24h: number 字段

Scenario: TrendPoint 类型

  • WHEN 前后端共享 TrendPoint 类型
  • THEN 该类型 SHALL 包含 hour: stringavgDurationMs: number | nullminDurationMs: number | nullmaxDurationMs: number | nullavailability: numbertotalChecks: numberupChecks: number 字段

Scenario: TargetStats 类型

  • WHEN 前后端共享 TargetStats 类型
  • THEN 该类型 SHALL 包含 availability: numbertotalChecks: number 字段(语义变更为基于时间窗口计算)