func (p *PrometheusReporter) RegisterCounterVec(name string, c *prometheus.CounterVec) {
	prometheus.MustRegister(c)
	p.countersVec[name] = c
}
RegisterCounterVec register counterVec in prometheus default registry
and add to map counter
package monitoring
import (
	"github.com/prometheus/client_golang/prometheus"
	"strings"
	"time"
)
type PrometheusReporter struct {
	countersVec   map[string]*prometheus.CounterVec
	counters      map[string]prometheus.Counter
	gaugesVec     map[string]*prometheus.GaugeVec
	gauges        map[string]prometheus.Gauge
	histograms    map[string]prometheus.Histogram
	histogramsVec map[string]*prometheus.HistogramVec
}
func NewPrometheusReporter() *PrometheusReporter {
	p := PrometheusReporter{}
	p.countersVec = make(map[string]*prometheus.CounterVec)
	p.counters = make(map[string]prometheus.Counter)
	p.gaugesVec = make(map[string]*prometheus.GaugeVec)
	p.gauges = make(map[string]prometheus.Gauge)
	p.histograms = make(map[string]prometheus.Histogram)
	p.histogramsVec = make(map[string]*prometheus.HistogramVec)
	return &p
}
func (p *PrometheusReporter) Inc(metric string) {
	parts := strings.Split(metric, ";")
	name := parts[0]
	if len(parts) == 1 {
		p.counters[name].Inc()
	} else {
		c, ok := p.countersVec[name]
		if ok {
			c.With(getLabels(parts[1])).Inc()
		}
	}
}
func (p *PrometheusReporter) Counter(metric string, val float64) {
	parts := strings.Split(metric, ";")
	name := parts[0]
	if len(parts) == 1 {
		p.counters[name].Add(val)
	} else {
		c, ok := p.countersVec[name]
		if ok {
			c.With(getLabels(parts[1])).Add(val)
		}
	}
}
func (p *PrometheusReporter) Gauge(metric string, val float64) {
	parts := strings.Split(metric, ";")
	name := parts[0]
	if len(parts) == 1 {
		p.gauges[name].Add(val)
	} else {
		c, ok := p.gaugesVec[name]
		if ok {
			c.With(getLabels(parts[1])).Add(val)
		}
	}
}
func (p *PrometheusReporter) Histogram(metric string, val float64) {
	parts := strings.Split(metric, ";")
	name := parts[0]
	if len(parts) == 1 {
		p.histograms[name].Observe(val)
	} else {
		c, ok := p.histogramsVec[name]
		if ok {
			c.With(getLabels(parts[1])).Observe(val)
		}
	}
}
func (p *PrometheusReporter) Timer(metric string) Timer {
	t := Timer{time.Now(), metric, func(start time.Time, metricName string) {
		timeDiff := time.Since(start)
		p.Histogram(metricName, float64(timeDiff.Nanoseconds())/1000.0)
	}}
	return t
}
func (p *PrometheusReporter) RegisterCounter(name string, c prometheus.Counter) {
	prometheus.MustRegister(c)
	p.counters[name] = c
}