修复服务器收到数据后提示400的错误
This commit is contained in:
@@ -3,8 +3,8 @@
|
|||||||
"id": "yunc",
|
"id": "yunc",
|
||||||
"name": "cloud",
|
"name": "cloud",
|
||||||
"device_id": "yunc",
|
"device_id": "yunc",
|
||||||
"token": "0b1f00e76e28beaed3be71d13e25aceb",
|
"token": "bedb47554f06ebabc075b52d8320428f",
|
||||||
"interval": "10s",
|
"interval": "10s",
|
||||||
"debug": true,
|
"debug": true,
|
||||||
"api_port": 8082
|
"api_port": 8081
|
||||||
}
|
}
|
||||||
@@ -108,15 +108,6 @@ func HandleMetricsPost(c *gin.Context) {
|
|||||||
agentName = device.Name
|
agentName = device.Name
|
||||||
}
|
}
|
||||||
|
|
||||||
// 解析请求体
|
|
||||||
var req MetricsRequest
|
|
||||||
if err := c.ShouldBindJSON(&req); err != nil {
|
|
||||||
c.JSON(http.StatusBadRequest, gin.H{
|
|
||||||
"error": "Invalid request body",
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 更新设备状态为active
|
// 更新设备状态为active
|
||||||
if err := deviceStorage.UpdateDeviceStatus(deviceID, "active"); err != nil {
|
if err := deviceStorage.UpdateDeviceStatus(deviceID, "active"); err != nil {
|
||||||
// 只记录警告,不影响指标处理
|
// 只记录警告,不影响指标处理
|
||||||
@@ -128,63 +119,86 @@ func HandleMetricsPost(c *gin.Context) {
|
|||||||
"agent_name": agentName,
|
"agent_name": agentName,
|
||||||
}
|
}
|
||||||
|
|
||||||
// 写入CPU指标
|
// 处理请求体,支持单指标对象和指标数组
|
||||||
if err := globalStorage.WriteMetric(c.Request.Context(), deviceID, "cpu", req.CPU, baseTags); err != nil {
|
var metricsList []MetricsRequest
|
||||||
// 只记录警告,不影响后续指标处理
|
|
||||||
log.Printf("Warning: Failed to write CPU metrics: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 写入内存指标
|
// 首先尝试解析为数组
|
||||||
if err := globalStorage.WriteMetric(c.Request.Context(), deviceID, "memory", req.Memory, baseTags); err != nil {
|
if err := c.ShouldBindJSON(&metricsList); err != nil {
|
||||||
// 只记录警告,不影响后续指标处理
|
// 如果解析数组失败,尝试解析为单个对象
|
||||||
log.Printf("Warning: Failed to write memory metrics: %v", err)
|
var singleMetric MetricsRequest
|
||||||
}
|
if err := c.ShouldBindJSON(&singleMetric); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{
|
||||||
// 写入磁盘指标,支持多个挂载点
|
"error": "Invalid request body",
|
||||||
for mountpoint, usage := range req.Disk {
|
})
|
||||||
// 为每个挂载点创建标签,包含基础标签和挂载点
|
return
|
||||||
tags := make(map[string]string)
|
|
||||||
// 复制基础标签
|
|
||||||
for k, v := range baseTags {
|
|
||||||
tags[k] = v
|
|
||||||
}
|
}
|
||||||
// 添加挂载点标签
|
// 将单个对象添加到列表中
|
||||||
tags["mountpoint"] = mountpoint
|
metricsList = append(metricsList, singleMetric)
|
||||||
|
}
|
||||||
|
|
||||||
// 写入磁盘指标
|
// 处理所有指标
|
||||||
if err := globalStorage.WriteMetric(c.Request.Context(), deviceID, "disk", usage, tags); err != nil {
|
for i, req := range metricsList {
|
||||||
|
// 写入CPU指标
|
||||||
|
if err := globalStorage.WriteMetric(c.Request.Context(), deviceID, "cpu", req.CPU, baseTags); err != nil {
|
||||||
// 只记录警告,不影响后续指标处理
|
// 只记录警告,不影响后续指标处理
|
||||||
log.Printf("Warning: Failed to write disk metrics for mountpoint %s: %v", mountpoint, err)
|
log.Printf("Warning: Failed to write CPU metrics: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 写入内存指标
|
||||||
|
if err := globalStorage.WriteMetric(c.Request.Context(), deviceID, "memory", req.Memory, baseTags); err != nil {
|
||||||
|
// 只记录警告,不影响后续指标处理
|
||||||
|
log.Printf("Warning: Failed to write memory metrics: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 写入磁盘指标,支持多个挂载点
|
||||||
|
for mountpoint, usage := range req.Disk {
|
||||||
|
// 为每个挂载点创建标签,包含基础标签和挂载点
|
||||||
|
tags := make(map[string]string)
|
||||||
|
// 复制基础标签
|
||||||
|
for k, v := range baseTags {
|
||||||
|
tags[k] = v
|
||||||
|
}
|
||||||
|
// 添加挂载点标签
|
||||||
|
tags["mountpoint"] = mountpoint
|
||||||
|
|
||||||
|
// 写入磁盘指标
|
||||||
|
if err := globalStorage.WriteMetric(c.Request.Context(), deviceID, "disk", usage, tags); err != nil {
|
||||||
|
// 只记录警告,不影响后续指标处理
|
||||||
|
log.Printf("Warning: Failed to write disk metrics for mountpoint %s: %v", mountpoint, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 写入网络发送指标
|
||||||
|
if err := globalStorage.WriteMetric(c.Request.Context(), deviceID, "network_sent", float64(req.Network.BytesSent), baseTags); err != nil {
|
||||||
|
// 只记录警告,不影响后续指标处理
|
||||||
|
log.Printf("Warning: Failed to write network sent metrics: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 写入网络接收指标
|
||||||
|
if err := globalStorage.WriteMetric(c.Request.Context(), deviceID, "network_received", float64(req.Network.BytesReceived), baseTags); err != nil {
|
||||||
|
// 只记录警告,不影响后续指标处理
|
||||||
|
log.Printf("Warning: Failed to write network received metrics: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 广播指标更新消息,只广播最后一个指标
|
||||||
|
if i == len(metricsList)-1 {
|
||||||
|
metrics := map[string]interface{}{
|
||||||
|
"cpu": req.CPU,
|
||||||
|
"memory": req.Memory,
|
||||||
|
"disk": req.Disk,
|
||||||
|
"network": map[string]uint64{
|
||||||
|
"bytes_sent": req.Network.BytesSent,
|
||||||
|
"bytes_received": req.Network.BytesReceived,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
broadcastMetricsUpdate(deviceID, metrics)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 写入网络发送指标
|
|
||||||
if err := globalStorage.WriteMetric(c.Request.Context(), deviceID, "network_sent", float64(req.Network.BytesSent), baseTags); err != nil {
|
|
||||||
// 只记录警告,不影响后续指标处理
|
|
||||||
log.Printf("Warning: Failed to write network sent metrics: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 写入网络接收指标
|
|
||||||
if err := globalStorage.WriteMetric(c.Request.Context(), deviceID, "network_received", float64(req.Network.BytesReceived), baseTags); err != nil {
|
|
||||||
// 只记录警告,不影响后续指标处理
|
|
||||||
log.Printf("Warning: Failed to write network received metrics: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 广播指标更新消息
|
|
||||||
metrics := map[string]interface{}{
|
|
||||||
"cpu": req.CPU,
|
|
||||||
"memory": req.Memory,
|
|
||||||
"disk": req.Disk,
|
|
||||||
"network": map[string]uint64{
|
|
||||||
"bytes_sent": req.Network.BytesSent,
|
|
||||||
"bytes_received": req.Network.BytesReceived,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
broadcastMetricsUpdate(deviceID, metrics)
|
|
||||||
|
|
||||||
// 返回成功响应
|
// 返回成功响应
|
||||||
c.JSON(http.StatusOK, gin.H{
|
c.JSON(http.StatusOK, gin.H{
|
||||||
"message": "Metrics received successfully",
|
"message": "Metrics received successfully",
|
||||||
|
"count": len(metricsList),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user