fix: 仪表盘资源趋势图使用真实Agent指标替代随机假数据

- 后端 GetMetrics 修复 strftime 字符串无法扫入 time.Time 导致 timestamp 为零值的 bug
  (改为 string 类型 + time.ParseInLocation 手动解析)
- 前端 Dashboard.tsx 新增 getMetrics(24) 调用,获取真实按小时聚合的 Agent 数据
- DashboardCharts.tsx 新增 buildMetricsFromReal() 将 MetricData[] 转换为图表数据
- ResourceUsageCard 优先使用真实时间序列,无数据时回退到平均值生成
This commit is contained in:
attacker committed 2026-06-15 03:05:26 +08:00
1 parent b770ec025b
commit a3b84f79c7
3 files changed
+50 -8

No files matched your search

+11 -6
View File
@@ -294,12 +294,12 @@ func (h *DashboardHandler) GetMetrics(c *gin.Context) {
}
}
// 从 agent_reports 表查最近 N 小时的真实数据
// 从 agent_reports 表查最近 N 小时的真实数据 // Logan.Li
since := time.Now().Add(-time.Duration(hours) * time.Hour)
type avgPoint struct {
Bucket time.Time
AvgCPU float64
AvgMem float64
Bucket string // strftime 返回字符串 "2006-01-02 15:00",不能直接扫入 time.Time(会得零值)
AvgCPU float64
AvgMem float64
}
var rows []avgPoint
h.db.Model(&models.AgentReport{}).
@@ -311,9 +311,14 @@ func (h *DashboardHandler) GetMetrics(c *gin.Context) {
var metrics []models.MetricData
for _, r := range rows {
// 手动解析 SQLite strftime 字符串为 time.Time(GORM 无法自动转换) // Logan.Li
ts, err := time.ParseInLocation("2006-01-02 15:00", r.Bucket, time.Local)
if err != nil {
ts = time.Now()
}
metrics = append(metrics,
models.MetricData{Name: "cpu", Value: r.AvgCPU, Timestamp: r.Bucket},
models.MetricData{Name: "memory", Value: r.AvgMem, Timestamp: r.Bucket},
models.MetricData{Name: "cpu", Value: r.AvgCPU, Timestamp: ts},
models.MetricData{Name: "memory", Value: r.AvgMem, Timestamp: ts},
)
}