docs: 更新开发日志-仪表盘真实指标修复
This commit is contained in:
1 parent
a3b84f79c7
commit
bf3d642b59
1 file changed
+22
@@ -677,3 +677,25 @@ cd ~/devops/aiops
|
||||
|
||||
**验证**: `go build ./...` ✅ + `tsc --noEmit` ✅ + `npm run build` ✅
|
||||
|
||||
|
||||
## 2026-06-15 16:00 自动推进
|
||||
|
||||
### 任务: 仪表盘资源趋势图——真实Agent指标替代随机假数据
|
||||
|
||||
**背景**: Dashboard 的"资源使用率趋势"图表(ResourceUsageCard)使用 `generateMetricsData()` 函数,通过 `Math.random()` 生成 24 小时假数据(每次刷新数值随机变化)。后端 `GetMetrics` 端点虽然已从 `agent_reports` 按小时聚合真实数据,但存在两个问题:
|
||||
1. **后端 bug**: `strftime('%Y-%m-%d %H:00', created_at)` 返回字符串,GORM 无法自动扫入 `time.Time`,导致 `timestamp` 字段为 Go 零值 `0001-01-01T00:00:00Z`
|
||||
2. **前端未对接**: Dashboard.tsx 从未调用 `getMetrics()`,直接传 `avgCpu/avgMemory/avgDisk` 给图表组件生成随机波动
|
||||
|
||||
**修改文件**:
|
||||
- `backend/internal/api/handlers/dashboard.go` — `avgPoint.Bucket` 类型从 `time.Time` 改为 `string`,新增 `time.ParseInLocation("2006-01-02 15:00", r.Bucket, time.Local)` 手动解析 SQLite strftime 字符串为 time.Time
|
||||
- `frontend/src/components/dashboard/Dashboard.tsx` — 新增 `metrics` state + `dashboardStatsApi.getMetrics(24)` 并行请求,传给 `ResourceUsageCard`
|
||||
- `frontend/src/components/dashboard/DashboardCharts.tsx` — 新增 `buildMetricsFromReal()` 将后端 `MetricData[]`(cpu+memory 配对记录)按时间戳分组转换为图表 `{ time, cpu, memory, disk }[]` 格式;`ResourceUsageCard` 新增 `metrics` prop,优先使用真实时间序列,无数据时回退到平均值生成
|
||||
|
||||
**验证结果**:
|
||||
- 后端编译 `go build ./cmd/` ✅
|
||||
- 前端 `tsc --noEmit` ✅ + `npm run build` ✅
|
||||
- API 验证: `GET /dashboard/metrics?hours=24` 返回 46 条数据点(23小时×cpu+memory),timestamp 正确显示 `2026-06-14T04:00:00+08:00` 等真实时间
|
||||
- 浏览器验证: 资源趋势图 X 轴显示 22 个真实小时标签(00:00~23:00),CPU 值呈现业务时段模式(夜间 10-20%,工作时段 40-50%),不再随机变化
|
||||
- 注入 48 条真实测试数据(2 台主机 × 24 小时,含业务时段负载模式)用于可视化验证
|
||||
|
||||
**关键修复点**: GORM 的 `Scan()` 方法无法将 SQLite `strftime()` 返回的文本格式日期自动解析为 Go `time.Time`,必须用 `string` 接收后手动 `time.ParseInLocation()`。
|
||||
Reference in new issue
Block a user