# Dashboard 24h 资源趋势（B-02）设计

## 背景与目标

仪表盘当前仅展示 Redis 实时快照的平均 CPU/内存；无历史曲线。运维需要查看**近 24 小时**全舰队 CPU/内存/磁盘变化趋势。

## 方案对比

| 方案 | 优点 | 缺点 |
|------|------|------|
| A. 每机时序表 | 可下钻单机 | 367 台 × 144 点/天，存储与查询重 |
| B. **舰队聚合采样（选定）** | 与 Dashboard 概览一致；10min 一条 | 无单机曲线 |
| C. 仅 Redis 滑动窗口 | 无 DB | 重启丢失；非 SSOT |

## 选定方案 B

- `heartbeat_flush`（10min）在写 `servers` 后，从本轮 Redis 心跳计算舰队均值，写入 `fleet_metric_samples`。
- 保留 **7 天**；API 默认 `hours=24`。
- 前端 Dashboard「24h 资源趋势」使用 **ECharts**（`vue-echarts`，按需分包）：四序列、图例、十字线 tooltip、dataZoom。

## 数据模型

```sql
fleet_metric_samples (
  id INT PK,
  recorded_at DATETIME NOT NULL,  -- UTC naive
  online_count INT,
  sample_count INT,
  cpu_avg FLOAT NULL,
  mem_avg FLOAT NULL,
  disk_avg FLOAT NULL,
  INDEX (recorded_at)
)
```

## API

`GET /api/servers/fleet-metrics?hours=24`

```json
{
  "hours": 24,
  "interval_minutes": 10,
  "points": [
    { "recorded_at": "2026-06-09 12:00:00", "cpu_avg": 12.5, "mem_avg": 45.2, "disk_avg": 60.1, "online_count": 366 }
  ]
}
```

## 安全与性能

- 需 `get_current_admin`；只读聚合。
- 每 10min 1 行；7 天约 1008 行，可忽略。
- purge 在 flush 循环末尾批量 DELETE。

## 验收标准

- 部署 24h 后曲线有数据；新环境至少显示空状态文案。
- 时间轴按北京时间展示。
- `local_verify` + 单测通过。
