github.com/amazechain/amc@v0.1.3/internal/metrics/prometheus/register.go (about) 1 package prometheus 2 3 import ( 4 "time" 5 6 vm "github.com/VictoriaMetrics/metrics" 7 "github.com/prometheus/client_golang/prometheus" 8 dto "github.com/prometheus/client_model/go" 9 ) 10 11 const UsePrometheusClient = false 12 13 type Summary interface { 14 UpdateDuration(time.Time) 15 } 16 17 type Counter interface { 18 Inc() 19 Dec() 20 Add(n int) 21 Set(n uint64) 22 Get() uint64 23 } 24 25 type intCounter struct { 26 prometheus.Gauge 27 } 28 29 func (c intCounter) Add(n int) { 30 c.Gauge.Add(float64(n)) 31 } 32 33 func (c intCounter) Set(n uint64) { 34 c.Gauge.Set(float64(n)) 35 } 36 37 func (c intCounter) Get() uint64 { 38 var m dto.Metric 39 c.Gauge.Write(&m) 40 return uint64(m.GetGauge().GetValue()) 41 } 42 43 func GetOrCreateCounter(s string, isGauge ...bool) Counter { 44 if UsePrometheusClient { 45 counter := defaultSet.GetOrCreateGauge(s) 46 return intCounter{counter} 47 } else { 48 counter := vm.GetOrCreateCounter(s, isGauge...) 49 DefaultRegistry.Register(s, counter) 50 vm.GetDefaultSet().UnregisterMetric(s) 51 return counter 52 } 53 } 54 55 func GetOrCreateGaugeFunc(s string, f func() float64) prometheus.GaugeFunc { 56 return defaultSet.GetOrCreateGaugeFunc(s, f) 57 } 58 59 type summary struct { 60 prometheus.Summary 61 } 62 63 func (sm summary) UpdateDuration(startTime time.Time) { 64 sm.Observe(time.Since(startTime).Seconds()) 65 } 66 67 func GetOrCreateSummary(s string) Summary { 68 if UsePrometheusClient { 69 s := defaultSet.GetOrCreateSummary(s) 70 return summary{s} 71 } else { 72 summary := vm.GetOrCreateSummary(s) 73 DefaultRegistry.Register(s, summary) 74 vm.GetDefaultSet().UnregisterMetric(s) 75 return summary 76 } 77 } 78 79 func GetOrCreateHistogram(s string) prometheus.Histogram { 80 return defaultSet.GetOrCreateHistogram(s) 81 }