func AddHandlerMetrics(handlerName string) {
	handlerMetrics := newHandlerMetrics(handlerName)
	_, exists := handlerMetricsByHandlerName.LoadOrStore(handlerName, handlerMetrics)
	if !exists {
		prometheus.MustRegister(handlerMetrics.latency, handlerMetrics.result)
	}
}
AddHandlerMetrics adds a handler to be tracked with metrics
package metrics
import (
	"fmt"
	"sync"
	"github.com/prometheus/client_golang/prometheus/promauto"
	io_prometheus_client "github.com/prometheus/client_model/go"
	"github.com/prometheus/client_golang/prometheus"
	"github.com/sirupsen/logrus"
)
var (
	handlerMetricsByHandlerName = &sync.Map{}
	handlersResultCounter       = promauto.NewCounterVec(prometheus.CounterOpts{
		Namespace: grabbitPrefix,
		Subsystem: handlers,
		Name:      handlerResult,
		Help:      "The result of the message handler. The handler's name, message type and result are labeled",
	}, []string{handler, messageTypeLabel, handlerResult})
	handlersLatencySummary = promauto.NewSummaryVec(prometheus.SummaryOpts{
		Namespace: grabbitPrefix,
		Subsystem: handlers,
		Name:      handlerLatency,
		Help:      "The latency of the message handler. The handler's name and message type are labeled",
	}, []string{handler, messageTypeLabel})
)
const (
	failure          = "failure"
	success          = "success"
	handlerResult    = "result"
	handlers         = "handlers"
	grabbitPrefix    = "grabbit"
	messageTypeLabel = "message_type"
	handlerLatency   = "latency"
	handler          = "handler"
)
type HandlerMetrics struct {
	result  *prometheus.CounterVec
	latency prometheus.Summary
}