From 16e692e0e76d4514921000fc0ea9d6680c203700 Mon Sep 17 00:00:00 2001 From: Wangjunqi123 Date: Tue, 29 Oct 2024 16:11:16 +0800 Subject: [PATCH] agent: agent uses request body to pass heartbeat parameters --- agent/service/heartbeat.go | 18 ++++++++++++++++-- server/errormanager/errormanager.go | 12 ++++++++---- server/handler/basicHandler.go | 28 ++++++++++++++-------------- 3 files changed, 38 insertions(+), 20 deletions(-) diff --git a/agent/service/heartbeat.go b/agent/service/heartbeat.go index 4d17c89..2281840 100644 --- a/agent/service/heartbeat.go +++ b/agent/service/heartbeat.go @@ -41,8 +41,22 @@ func sendHeartbeat(addr string) error { m_u_struct := &machineuuid{} json.Unmarshal(m_u_bytes, m_u_struct) - url := fmt.Sprintf("http://%s/plugin/topology/api/heartbeat?agentaddr=%s&uuid=%s&interval=%d", conf.Config().Topo.Server_addr, addr, m_u_struct.Agentuuid, conf.Config().Topo.Heartbeat) - resp, err := httputils.Post(url, nil) + type AgentHeartbeat struct { + UUID string + Addr string + HeartbeatInterval int + Time time.Time + } + url := fmt.Sprintf("http://%s/plugin/topology/api/heartbeat", conf.Config().Topo.Server_addr) + body := AgentHeartbeat{ + UUID: m_u_struct.Agentuuid, + Addr: addr, + HeartbeatInterval: conf.Config().Topo.Heartbeat, + } + params := &httputils.Params{ + Body: body, + } + resp, err := httputils.Post(url, params) if err != nil { err = errors.Errorf("failed to send heartbeat: %s", err.Error()) return err diff --git a/server/errormanager/errormanager.go b/server/errormanager/errormanager.go index 537c25a..b547c18 100644 --- a/server/errormanager/errormanager.go +++ b/server/errormanager/errormanager.go @@ -45,14 +45,18 @@ func InitErrorManager() { } switch errarr[1] { - case "debug": // 只打印最底层error的message,不展开错误链的调用栈 + // 只打印最底层error的message,不展开错误链的调用栈 + case "debug": logger.Debug("%+v\n", strings.Split(errors.Cause(topoerr.Err).Error(), "**")[0]) - case "warn": // 只打印最底层error的message,不展开错误链的调用栈 + // 只打印最底层error的message,不展开错误链的调用栈 + case "warn": logger.Warn("%+v\n", strings.Split(errors.Cause(topoerr.Err).Error(), "**")[0]) - case "errstack": // 打印错误链的调用栈 + // 打印错误链的调用栈 + case "errstack": fmt.Fprintf(Global_ErrorManager.Out, "%+v\n", topoerr.Err) // errors.EORE(err) - case "errstackfatal": // 打印错误链的调用栈,并结束程序 + // 打印错误链的调用栈,并结束程序 + case "errstackfatal": fmt.Fprintf(Global_ErrorManager.Out, "%+v\n", topoerr.Err) // errors.EORE(err) topoerr.Cancel() diff --git a/server/handler/basicHandler.go b/server/handler/basicHandler.go index 69d7205..f4e755b 100644 --- a/server/handler/basicHandler.go +++ b/server/handler/basicHandler.go @@ -3,7 +3,6 @@ package handler import ( "fmt" "net/http" - "strconv" "time" "gitee.com/openeuler/PilotGo-plugin-topology/server/agentmanager" @@ -19,20 +18,21 @@ import ( func HeartbeatHandle(ctx *gin.Context) { // agent发送的心跳参数为uuid、ip:port、HeartbeatInterval、time, // 写入redis的数据为 (heartbeat-: {"UUID": "f7504bef-76e9-446c-95ee-196878b398a1", "Addr": "10.44.55.66:9992", "HeartbeatInterval": 60, "Time": "2023-12-22T17:09:23+08:00"}) - uuid := ctx.Query("uuid") - addr := ctx.Query("agentaddr") - heartbeatinterval, _ := strconv.Atoi(ctx.Query("interval")) - - key := "heartbeat-topoagent-" + uuid - value := redismanager.AgentHeartbeat{ - UUID: uuid, - Addr: addr, - HeartbeatInterval: heartbeatinterval, - Time: time.Now(), + value := redismanager.AgentHeartbeat{} + if err := ctx.ShouldBindJSON(&value); err != nil { + err := errors.New("bind json failed **errstackfatal**0") + ctx.JSON(http.StatusInternalServerError, gin.H{ + "code": -1, + "error": err.Error(), + "data": nil, + }) + errormanager.ErrorTransmit(pluginclient.Global_Context, err, true) } + key := "heartbeat-topoagent-" + value.UUID + value.Time = time.Now() if agentmanager.Global_AgentManager == nil { - err := errors.New("Global_AgentManager is nil **errstackfatal**0") // err top + err := errors.New("Global_AgentManager is nil **errstackfatal**0") ctx.JSON(http.StatusInternalServerError, gin.H{ "code": -1, "error": err.Error(), @@ -42,8 +42,8 @@ func HeartbeatHandle(ctx *gin.Context) { return } - if agentmanager.Global_AgentManager.GetAgent_P(uuid) == nil { - err := errors.Errorf("unknown agent's heartbeat: %s, %s **warn**1", uuid, addr) // err top + if agentmanager.Global_AgentManager.GetAgent_P(value.UUID) == nil { + err := errors.Errorf("unknown agent's heartbeat: %s, %s **warn**1", value.UUID, value.Addr) // err top errormanager.ErrorTransmit(pluginclient.Global_Context, err, false) ctx.JSON(http.StatusUnauthorized, gin.H{ "code": -1, -- Gitee