package middleware import ( "strconv" "time" "github.com/gin-gonic/gin" "armature/metrics" ) // Prometheus returns a Gin middleware that records HTTP request metrics. // Uses c.FullPath() (Gin's registered route pattern, e.g. // "/api/v1/workflows/:id") to avoid label cardinality explosion from // path parameters. func Prometheus() gin.HandlerFunc { return func(c *gin.Context) { start := time.Now() c.Next() pattern := c.FullPath() if pattern == "" { pattern = "unmatched" } status := strconv.Itoa(c.Writer.Status()) metrics.HTTPRequestsTotal.WithLabelValues(c.Request.Method, pattern, status).Inc() metrics.HTTPRequestDuration.WithLabelValues(c.Request.Method, pattern).Observe(time.Since(start).Seconds()) } }