Changeset 0.33.0 (#207)
Co-authored-by: Jeffrey Smith <jasafpro@gmail.com> Co-committed-by: Jeffrey Smith <jasafpro@gmail.com>
This commit is contained in:
30
server/middleware/prometheus.go
Normal file
30
server/middleware/prometheus.go
Normal file
@@ -0,0 +1,30 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"chat-switchboard/metrics"
|
||||
)
|
||||
|
||||
// Prometheus returns a Gin middleware that records HTTP request metrics.
|
||||
// Uses c.FullPath() (Gin's registered route pattern, e.g.
|
||||
// "/api/v1/channels/: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())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user