@@ -2,6 +2,7 @@ package metric
22
33import (
44 "sync"
5+ "time"
56
67 "github.com/prometheus/client_golang/prometheus"
78)
@@ -11,73 +12,95 @@ const (
1112)
1213
1314var (
14- SecondsBucketsDetailedNano = prometheus .ExponentialBuckets (0.000005 , 2 , 19 ) // covers range from 5ns to 1.3ms
15- SecondsBucketsDetailed = prometheus .ExponentialBuckets (0.0005 , 2 , 16 ) // covers range from 500us to 16.384s
16- SecondsBucketsLong = prometheus .ExponentialBuckets (0.005 , 2 , 16 ) // covers range from 5ms to 163.84s
15+ SecondsBucketsDetailedNano = prometheus .ExponentialBuckets (0.000005 , 2.18 , 17 ) // covers range from 5µs to 1.3s
16+ SecondsBucketsDetailed = prometheus .ExponentialBuckets (0.0005 , 2 , 16 ) // covers range from 500µs to 16.384s
17+ SecondsBucketsLong = prometheus .ExponentialBuckets (0.005 , 2 , 16 ) // covers range from 5000µs to 163.84s
1718)
1819
1920type Ctl struct {
2021 subsystem string
2122 register * prometheus.Registry
2223
24+ holder * Holder
2325 metrics map [string ]prometheus.Collector
2426 mu sync.RWMutex
2527}
2628
27- func NewCtl (subsystem string , registry * prometheus.Registry ) * Ctl {
29+ func NewCtl (subsystem string , registry * prometheus.Registry , metricHoldDuration time. Duration ) * Ctl {
2830 ctl := & Ctl {
2931 subsystem : subsystem ,
3032 register : registry ,
3133 metrics : make (map [string ]prometheus.Collector ),
3234 }
35+
36+ if metricHoldDuration != 0 {
37+ ctl .holder = NewHolder (metricHoldDuration )
38+ }
39+
3340 return ctl
3441}
3542
36- func (mc * Ctl ) RegisterCounter (name , help string ) prometheus.Counter {
43+ func (mc * Ctl ) Maintenance () {
44+ if mc .holder == nil {
45+ return
46+ }
47+
48+ mc .holder .maintenance ()
49+ }
50+
51+ func (mc * Ctl ) AddToHolder (mv heldMetricVec ) {
52+ if mc .holder == nil {
53+ return
54+ }
55+
56+ mc .holder .addMetricVec (mv )
57+ }
58+
59+ func (mc * Ctl ) RegisterCounter (name , help string ) * Counter {
3760 counter := prometheus .NewCounter (prometheus.CounterOpts {
3861 Namespace : PromNamespace ,
3962 Subsystem : mc .subsystem ,
4063 Name : name ,
4164 Help : help ,
4265 })
4366
44- return mc .registerMetric (name , counter ).(prometheus.Counter )
67+ return newCounter ( mc .registerMetric (name , counter ).(prometheus.Counter ) )
4568}
4669
47- func (mc * Ctl ) RegisterCounterVec (name , help string , labels ... string ) * prometheus. CounterVec {
70+ func (mc * Ctl ) RegisterCounterVec (name , help string , labels ... string ) * CounterVec {
4871 counterVec := prometheus .NewCounterVec (prometheus.CounterOpts {
4972 Namespace : PromNamespace ,
5073 Subsystem : mc .subsystem ,
5174 Name : name ,
5275 Help : help ,
5376 }, labels )
5477
55- return mc .registerMetric (name , counterVec ).(* prometheus.CounterVec )
78+ return newCounterVec ( mc .registerMetric (name , counterVec ).(* prometheus.CounterVec ) )
5679}
5780
58- func (mc * Ctl ) RegisterGauge (name , help string ) prometheus. Gauge {
81+ func (mc * Ctl ) RegisterGauge (name , help string ) * Gauge {
5982 gauge := prometheus .NewGauge (prometheus.GaugeOpts {
6083 Namespace : PromNamespace ,
6184 Subsystem : mc .subsystem ,
6285 Name : name ,
6386 Help : help ,
6487 })
6588
66- return mc .registerMetric (name , gauge ).(prometheus.Gauge )
89+ return newGauge ( mc .registerMetric (name , gauge ).(prometheus.Gauge ) )
6790}
6891
69- func (mc * Ctl ) RegisterGaugeVec (name , help string , labels ... string ) * prometheus. GaugeVec {
92+ func (mc * Ctl ) RegisterGaugeVec (name , help string , labels ... string ) * GaugeVec {
7093 gaugeVec := prometheus .NewGaugeVec (prometheus.GaugeOpts {
7194 Namespace : PromNamespace ,
7295 Subsystem : mc .subsystem ,
7396 Name : name ,
7497 Help : help ,
7598 }, labels )
7699
77- return mc .registerMetric (name , gaugeVec ).(* prometheus.GaugeVec )
100+ return newGaugeVec ( mc .registerMetric (name , gaugeVec ).(* prometheus.GaugeVec ) )
78101}
79102
80- func (mc * Ctl ) RegisterHistogram (name , help string , buckets []float64 ) prometheus. Histogram {
103+ func (mc * Ctl ) RegisterHistogram (name , help string , buckets []float64 ) * Histogram {
81104 histogram := prometheus .NewHistogram (prometheus.HistogramOpts {
82105 Namespace : PromNamespace ,
83106 Subsystem : mc .subsystem ,
@@ -86,10 +109,10 @@ func (mc *Ctl) RegisterHistogram(name, help string, buckets []float64) prometheu
86109 Buckets : buckets ,
87110 })
88111
89- return mc .registerMetric (name , histogram ).(prometheus.Histogram )
112+ return newHistogram ( mc .registerMetric (name , histogram ).(prometheus.Histogram ) )
90113}
91114
92- func (mc * Ctl ) RegisterHistogramVec (name , help string , buckets []float64 , labels ... string ) * prometheus. HistogramVec {
115+ func (mc * Ctl ) RegisterHistogramVec (name , help string , buckets []float64 , labels ... string ) * HistogramVec {
93116 histogramVec := prometheus .NewHistogramVec (prometheus.HistogramOpts {
94117 Namespace : PromNamespace ,
95118 Subsystem : mc .subsystem ,
@@ -98,7 +121,7 @@ func (mc *Ctl) RegisterHistogramVec(name, help string, buckets []float64, labels
98121 Buckets : buckets ,
99122 }, labels )
100123
101- return mc .registerMetric (name , histogramVec ).(* prometheus.HistogramVec )
124+ return newHistogramVec ( mc .registerMetric (name , histogramVec ).(* prometheus.HistogramVec ) )
102125}
103126
104127func (mc * Ctl ) registerMetric (name string , newMetric prometheus.Collector ) prometheus.Collector {
0 commit comments