From 7a5296f003cd578f4227499a5c1e46e1b6c035bf Mon Sep 17 00:00:00 2001 From: Wangjunqi123 Date: Fri, 8 Nov 2024 10:15:52 +0800 Subject: [PATCH] agent: custom gin logger middleware --- cmd/agent/resourcemanage/resourcemanage.go | 3 ++ cmd/agent/webserver/engine.go | 7 ++- cmd/agent/webserver/middleware/logger.go | 58 ++++++++++++++++++++++ 3 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 cmd/agent/webserver/middleware/logger.go diff --git a/cmd/agent/resourcemanage/resourcemanage.go b/cmd/agent/resourcemanage/resourcemanage.go index 2740076..3b0b1e8 100644 --- a/cmd/agent/resourcemanage/resourcemanage.go +++ b/cmd/agent/resourcemanage/resourcemanage.go @@ -80,6 +80,9 @@ func (erm *ErrorReleaseManagement) errorFactory() { logger.Info("error management stopped") return case _error := <-erm.ErrChan: + if _error == nil { + continue + } _terror, ok := _error.(*FinalError) if !ok { logger.Error("plain error: %s", _error.Error()) diff --git a/cmd/agent/webserver/engine.go b/cmd/agent/webserver/engine.go index 414ea69..74ca405 100755 --- a/cmd/agent/webserver/engine.go +++ b/cmd/agent/webserver/engine.go @@ -8,12 +8,17 @@ import ( "gitee.com/openeuler/PilotGo-plugin-topology/cmd/agent/conf" "gitee.com/openeuler/PilotGo-plugin-topology/cmd/agent/global" + "gitee.com/openeuler/PilotGo-plugin-topology/cmd/agent/webserver/middleware" "github.com/gin-gonic/gin" "github.com/pkg/errors" ) func InitWebServer() { - engine := gin.Default() + engine := gin.New() + engine.Use(gin.Recovery(), middleware.Logger([]string{ + "/plugin/topology/api/health", + "/", + })) gin.SetMode(gin.ReleaseMode) InitRouter(engine) diff --git a/cmd/agent/webserver/middleware/logger.go b/cmd/agent/webserver/middleware/logger.go new file mode 100644 index 0000000..030fe81 --- /dev/null +++ b/cmd/agent/webserver/middleware/logger.go @@ -0,0 +1,58 @@ +package middleware + +import ( + "time" + + "gitee.com/openeuler/PilotGo-plugin-topology/cmd/agent/global" + "github.com/gin-gonic/gin" + "github.com/pkg/errors" +) + +func Logger(_skipPaths []string) gin.HandlerFunc { + var skip map[string]struct{} + + if len(_skipPaths) > 0 { + skip = make(map[string]struct{}, len(_skipPaths)) + + for _, path := range _skipPaths { + skip[path] = struct{}{} + } + } + + return func(c *gin.Context) { + start := time.Now() + path := c.Request.URL.Path + raw := c.Request.URL.RawQuery + + c.Next() + + if _, ok := skip[path]; !ok { + endTime := time.Now() + latency := endTime.Sub(start) + method := c.Request.Method + statusCode := c.Writer.Status() + clientIP := c.ClientIP() + errorMessage := c.Errors.ByType(gin.ErrorTypePrivate).String() + + if raw != "" { + path = path + "?" + raw + } + + if latency > time.Minute { + latency = latency.Truncate(time.Second) + } + + global.ERManager.ErrorTransmit("gin", "debug", errors.Errorf("|%3d| %-13v | %-15s |%-7s %#v", + statusCode, + latency, + clientIP, + method, + path), + false, false, + ) + if errorMessage != "" { + global.ERManager.ErrorTransmit("gin", "error", errors.New(errorMessage), false, false) + } + } + } +} -- Gitee