package middleware

import (
	"time"

	"github.com/pingcap/test-infra/services/rms/metrics"

	"github.com/labstack/echo/v4"
)

func MetricEndpoint(next echo.HandlerFunc) echo.HandlerFunc {
	return func(context echo.Context) error {
		label := map[string]string{"path": context.Path(), "method": context.Request().Method}
		metrics.RequestCounter.With(label).Inc()
		var start = time.Now()
		err := next(context)
		metrics.RequestDuration.With(label).Observe(time.Since(start).Seconds())
		if err != nil {
			label["status"] = "failure"
		} else {
			label["status"] = "success"
		}
		metrics.ResponseCounter.With(label).Inc()
		return err
	}
}
