1
0

feat: 前端指标体系增强 — Dashboard/Metrics API、2×4 统计区、趋势图面积+异常标记、连续状态列

- 新增 GET /api/dashboard 合并原 summary+targets 首屏接口
- 新增 GET /api/targets/:id/metrics 合并原 stats+trend 概览接口
- 后端指标纯函数:可用率、百分位、故障段分析、连续状态、UTC 小时分桶
- ProbeStore 窗口取数方法替代全量历史查询
- SummaryCards 扩展为 4 卡片(新增异常事件数)+ 数据新鲜度展示
- 表格新增「连续」列(Tag 渲染 capped 状态)
- OverviewTab 重构为 2×4 Statistic 多维度布局
- TrendChart 改为延迟范围面积图 + 红色异常标记点
- 删除旧路由(summary/targets/trend)和 computeTrendStats
- 同步 delta specs 到主 specs 并归档变更
This commit is contained in:
2026-05-14 12:32:41 +08:00
parent e983e5d75d
commit 1c5cfafda6
47 changed files with 1768 additions and 1231 deletions

View File

@@ -166,18 +166,19 @@ JSON Schema仓库根目录导出 `probe-config.schema.json`,可在 YAML 文
| ----------------------------------------------------------------- | ------------------------------------------------------------ |
| `GET /health` | 健康检查 |
| `GET /api/meta` | 运行时元信息checker 类型列表) |
| `GET /api/summary` | 总览统计total/up/down/lastCheckTime |
| `GET /api/targets` | 目标列表及最新状态、分组和采样数据 |
| `GET /api/dashboard?window=24h&recentLimit=30` | Dashboard 首屏聚合数据summary + targets |
| `GET /api/targets/:id/metrics?from=ISO&to=ISO&bucket=1h` | 指定目标的统计、可靠性指标和按小时趋势 |
| `GET /api/targets/:id/history?from=ISO&to=ISO&page=1&pageSize=20` | 指定目标的拨测记录(时间范围 + 分页,`pageSize` 最大 `200` |
| `GET /api/targets/:id/trend?from=ISO&to=ISO` | 指定目标的按小时聚合趋势 |
### 响应字段
**SummaryResponse**: `total``up``down``lastCheckTime`
**DashboardResponse**: `summary``targets`
**DashboardResponse.summary**: `total``up``down``lastCheckTime``incidents``window`
**MetaResponse**: `checkerTypes`(已注册 checker 类型标识符列表)
**TargetStatus**: `id``name``type`checker 类型,如 http/cmd`target`URL 或命令摘要)、`group``interval``latestCheck``stats``recentSamples`
**TargetStatus**: `id``name``type`checker 类型,如 http/cmd`target`URL 或命令摘要)、`group``interval``latestCheck``stats``currentStreak``recentSamples`
**RecentSample**: `timestamp``durationMs``up`
@@ -185,9 +186,15 @@ JSON Schema仓库根目录导出 `probe-config.schema.json`,可在 YAML 文
**CheckFailure**: `kind`error/mismatch`phase``path``message``expected?`(仅 mismatch`actual?`(仅 mismatch
**TargetStats**: `totalChecks``availability`
**TargetStats**: `totalChecks``upChecks``downChecks``availability`
**TrendPoint**: `hour``avgDurationMs``availability``totalChecks`
**CurrentStreak**: `up``count``capped?`
**TargetMetricsResponse**: `targetId``window``stats``trend`
**TargetMetricsResponse.stats**: `totalChecks``upChecks``downChecks``availability``avgDurationMs``p95DurationMs``p99DurationMs``mttr``longestOutage``incidentCount``currentStreak`
**TrendPoint**: `bucketStart``avgDurationMs``minDurationMs``maxDurationMs``availability``totalChecks``upChecks``downChecks`
**HistoryResponse**: `items`CheckResult[])、`total``page``pageSize`