From fd7868128afdc51dd8e2a2e8ceec7a909173378d Mon Sep 17 00:00:00 2001 From: nquidox Date: Thu, 5 Mar 2026 16:19:55 +0300 Subject: [PATCH] prometheus metrics --- router/handler.go | 67 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 router/handler.go diff --git a/router/handler.go b/router/handler.go new file mode 100644 index 0000000..5ede9de --- /dev/null +++ b/router/handler.go @@ -0,0 +1,67 @@ +package router + +import ( + "context" + "errors" + "github.com/gin-gonic/gin" + log "github.com/sirupsen/logrus" + ginprometheus "github.com/zsais/go-gin-prometheus" + "net/http" +) + +type Handler struct { + srv *http.Server +} + +type Deps struct { + Addr string + GinMode string +} + +const pkgLogHeader string = "Router |" + +func NewHandler(deps Deps) *Handler { + engine := gin.Default() + + if deps.GinMode == "release" { + gin.SetMode(gin.ReleaseMode) + err := engine.SetTrustedProxies([]string{"172.20.0.0/16"}) + if err != nil { + log.WithError(err).Errorf("%v Set proxies failed", pkgLogHeader) + return nil + } + } + + engine.GET("/", func(c *gin.Context) { c.JSON(200, gin.H{"msg": "v2"}) }) + + p := ginprometheus.NewPrometheus("gin") + p.Use(engine) + + engine.Use(gin.LoggerWithConfig(gin.LoggerConfig{ + Skip: func(c *gin.Context) bool { + return c.Request.URL.Path == "/metrics" + }, + })) + + srv := http.Server{ + Addr: deps.Addr, + Handler: engine, + } + + return &Handler{ + srv: &srv, + } +} + +func (h *Handler) Run() error { + log.Infof("Starting server on %s", h.srv.Addr) + if err := h.srv.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) { + log.WithError(err).Errorf("%v ListenAndServe failed", pkgLogHeader) + return err + } + return nil +} + +func (h *Handler) Shutdown(ctx context.Context) error { + return h.srv.Shutdown(ctx) +}