github.com/zhiqiangxu/util@v0.0.0-20230112053021-0a7aee056cd5/metrics/metrics.go (about)

     1  package metrics
     2  
     3  import (
     4  	"sync"
     5  
     6  	kitmetrics "github.com/go-kit/kit/metrics"
     7  
     8  	kitprometheus "github.com/go-kit/kit/metrics/prometheus"
     9  	stdprometheus "github.com/prometheus/client_golang/prometheus"
    10  )
    11  
    12  var (
    13  
    14  	// metric maps
    15  
    16  	counterMap = make(map[string]kitmetrics.Counter)
    17  	cl         sync.Mutex
    18  
    19  	gaugeMap = make(map[string]kitmetrics.Gauge)
    20  	gl       sync.Mutex
    21  
    22  	histMap = make(map[string]kitmetrics.Histogram)
    23  	hl      sync.Mutex
    24  )
    25  
    26  // RegisterCounter registers a counter
    27  func RegisterCounter(name string, labels []string) kitmetrics.Counter {
    28  	cl.Lock()
    29  	defer cl.Unlock()
    30  
    31  	_, ok := counterMap[name]
    32  	if ok {
    33  		panic("registered the same counter twice")
    34  	}
    35  
    36  	counter := kitprometheus.NewCounterFrom(stdprometheus.CounterOpts{Name: name}, labels)
    37  	counterMap[name] = counter
    38  	return counter
    39  }
    40  
    41  // GetCounter get a Counter by name
    42  func GetCounter(name string) kitmetrics.Counter {
    43  	cl.Lock()
    44  	defer cl.Unlock()
    45  
    46  	counter, ok := counterMap[name]
    47  	if ok {
    48  		return counter
    49  	}
    50  
    51  	panic("unregistered counter")
    52  
    53  }
    54  
    55  // RegisterGauge registers a gauge
    56  func RegisterGauge(name string, labels []string) kitmetrics.Gauge {
    57  	gl.Lock()
    58  	defer gl.Unlock()
    59  
    60  	_, ok := gaugeMap[name]
    61  	if ok {
    62  		panic("registered the same gauge twice")
    63  	}
    64  
    65  	gauge := kitprometheus.NewGaugeFrom(stdprometheus.GaugeOpts{Name: name}, labels)
    66  	gaugeMap[name] = gauge
    67  	return gauge
    68  }
    69  
    70  // GetGauge get a Gauge by name
    71  func GetGauge(name string) kitmetrics.Gauge {
    72  	gl.Lock()
    73  	defer gl.Unlock()
    74  
    75  	gauge, ok := gaugeMap[name]
    76  	if ok {
    77  		return gauge
    78  	}
    79  
    80  	panic("unregistered gauge")
    81  
    82  }
    83  
    84  var Objectives map[float64]float64
    85  
    86  // RegisterHist registers a hist
    87  func RegisterHist(name string, labels []string) kitmetrics.Histogram {
    88  	hl.Lock()
    89  	defer hl.Unlock()
    90  
    91  	_, ok := histMap[name]
    92  	if ok {
    93  		panic("registered the same gauge twice")
    94  	}
    95  
    96  	objectives := Objectives
    97  	if objectives == nil {
    98  		objectives = map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001}
    99  	}
   100  	hist := kitprometheus.NewSummaryFrom(stdprometheus.SummaryOpts{Name: name, Objectives: objectives}, labels)
   101  	histMap[name] = hist
   102  	return hist
   103  }
   104  
   105  // GetHist get a Hist by name
   106  func GetHist(name string) kitmetrics.Histogram {
   107  	hl.Lock()
   108  	defer hl.Unlock()
   109  
   110  	hist, ok := histMap[name]
   111  	if ok {
   112  		return hist
   113  	}
   114  
   115  	panic("unregistered gauge")
   116  
   117  }