package httpsr import ( "git.makemake.in/kzkzzzz/mycommon/mymetric" "github.com/gin-gonic/gin" "github.com/prometheus/client_golang/prometheus" "github.com/spf13/cast" "time" ) const CtxCollectRequestFrom = "ctx_collect_request_from" func QPSCollect(svcName string) gin.HandlerFunc { hs := mymetric.NewQPSHistogram(svcName, []string{ "svc", "method", "route", "status", "from", }...) return func(ctx *gin.Context) { st := time.Now() ctx.Next() hs.With(prometheus.Labels{ "svc": svcName, "method": ctx.Request.Method, "route": ctx.Request.URL.Path, "status": cast.ToString(ctx.Writer.Status()), "from": ctx.GetString(CtxCollectRequestFrom), }).Observe(float64(time.Since(st).Milliseconds())) } }