github.com/joao-fontenele/go-url-shortener@v1.3.4/pkg/api/middleware/metrics.go (about) 1 package middleware 2 3 import ( 4 "strconv" 5 "time" 6 7 "github.com/prometheus/client_golang/prometheus" 8 "github.com/valyala/fasthttp" 9 10 "github.com/joao-fontenele/go-url-shortener/pkg/metrics" 11 ) 12 13 // Metrics is a middleware that handles default route metrics 14 func Metrics(next fasthttp.RequestHandler) fasthttp.RequestHandler { 15 return func(ctx *fasthttp.RequestCtx) { 16 defer func() { 17 statusCode := strconv.Itoa(ctx.Response.StatusCode()) 18 route := string(ctx.Path()) 19 20 metrics.HTTPRequestsCounter.With( 21 prometheus.Labels{"route": route, "status": statusCode}, 22 ).Inc() 23 metrics.HTTPRequestsDurationHistogram.With( 24 prometheus.Labels{"route": route, "status": statusCode}, 25 ).Observe(time.Since(ctx.ConnTime()).Seconds()) 26 }() 27 next(ctx) 28 return 29 } 30 }