diff --git a/cmd/agent/resourcemanage/resourcemanage.go b/cmd/agent/resourcemanage/resourcemanage.go index 2740076fd5e1bf2ab53af24eb9f84b595175e2fe..3b0b1e891d5f1ef9ab8f8377109543c65d604d51 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 414ea69bf3ba1c4baaa28a7e86520aa559fe4f6c..74ca405b6b8f3162df3408cca0854dae6208865a 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 0000000000000000000000000000000000000000..030fe81c81361656a526f47f52e47cf9e38c6821 --- /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) + } + } + } +}