snapshot: 数据源管理+大屏增强前快照

This commit is contained in:
attacker committed 2026-06-18 14:01:22 +00:00
1 parent 2bf3e7c308
commit 1726ad65ac
19 files changed
+2540 -273

No files matched your search

+37 -14
View File
@@ -87,13 +87,15 @@ func (h *AgentHandler) ReceiveReport(c *gin.Context) {
result := h.db.Model(&models.Server{}).
Where("hostname = ? OR ip = ?", req.Hostname, req.Hostname).
Updates(map[string]interface{}{
"cpu_usage": req.CPU.UsagePercent,
"memory_usage": req.Memory.UsagePercent,
"disk_usage": diskAvg,
"cpu": req.CPU.CoreCount,
"memory": memMB,
"disk": int64(totalDiskGB),
"status": "running",
"cpu_usage": req.CPU.UsagePercent,
"memory_usage": req.Memory.UsagePercent,
"disk_usage": diskAvg,
"cpu": req.CPU.CoreCount,
"memory": memMB,
"disk": int64(totalDiskGB),
"status": "running",
"agent_status": "online",
"agent_version": req.AgentVersion,
})
// WebSocket 广播:向所有前端客户端推送该主机的最新指标 // Logan.Li
@@ -155,20 +157,41 @@ func (h *AgentHandler) writeHotMetric(c *gin.Context, key string, value float64,
// GetLatestReports 获取各主机最新上报
// GET /api/v1/agent/latest
func (h *AgentHandler) GetLatestReports(c *gin.Context) {
// 子查询:每个 hostname 最新的一条记录
var reports []models.AgentReport
var results []models.AgentLatestResponse
h.db.Raw(`
SELECT * FROM agent_reports
WHERE id IN (
SELECT
a.hostname,
COALESCE(s.ip, '') as ip,
a.cpu_usage,
a.cpu_cores,
a.mem_usage,
a.mem_total,
a.mem_used,
COALESCE(s.disk_usage, 0) as disk_usage,
a.disk_info,
a.net_info,
a.report_time,
COALESCE(s.agent_version, '') as agent_version,
COALESCE(s.agent_status, 'offline') as agent_status,
COALESCE(s.os, '') as os,
COALESCE(r.name, '') as region
FROM agent_reports a
LEFT JOIN servers s ON s.hostname = a.hostname
LEFT JOIN regions r ON r.id = s.region_id
WHERE a.id IN (
SELECT MAX(id) FROM agent_reports GROUP BY hostname
)
ORDER BY report_time DESC
`).Scan(&reports)
ORDER BY a.report_time DESC
`).Scan(&results)
if results == nil {
results = []models.AgentLatestResponse{}
}
c.JSON(http.StatusOK, models.Response{
Code: 200,
Message: "success",
Data: reports,
Data: results,
})
}