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()))

	}
}
