package middleware import ( "strconv" "time" "github.com/gin-gonic/gin" "switchbot-api/internal/app/observability" ) func Metrics(httpMetrics *observability.HTTPMetrics) gin.HandlerFunc { return func(c *gin.Context) { start := time.Now() httpMetrics.InFlight.Inc() defer httpMetrics.InFlight.Dec() c.Next() route := c.FullPath() if route == "" { route = "/unknown" } status := strconv.Itoa(c.Writer.Status()) httpMetrics.RequestsTotal.WithLabelValues(c.Request.Method, route, status).Inc() httpMetrics.RequestDuration.WithLabelValues(c.Request.Method, route, status).Observe(time.Since(start).Seconds()) } }