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 }