package metrics import ( "git.0x7f.app/WOJ/woj-server/internal/e" "git.0x7f.app/WOJ/woj-server/pkg/utils" "github.com/gin-gonic/gin" "net/http" "strings" "time" ) func (s *service) SetLogPaths(paths []string) { s.logPaths = paths } func (s *service) Handler() gin.HandlerFunc { return func(c *gin.Context) { url := c.Request.URL.String() method := c.Request.Method if !utils.Contains(s.logPaths, func(path string) bool { return strings.HasPrefix(url, path) }) { c.Next() return } start := time.Now() c.Next() elapsed := float64(time.Since(start)) / float64(time.Millisecond) status := c.Writer.Status() success := !c.IsAborted() && (status == http.StatusOK) errCode, _ := c.Get("err") err, ok := errCode.(e.Status) if !ok { success = false err = e.Unknown } else if err != e.Success { success = false } s.Record(method, url, success, status, err, elapsed) } }