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  }