@@ -49,6 +49,7 @@ func NewStatsTracker(registry *prometheus.Registry) (*Tracker, error) {
49
49
type Tracker struct {
50
50
mu sync.Mutex
51
51
collectors map [identity ]func (map [string ]string , float64 )
52
+ registered []prometheus.Collector
52
53
histograms map [string ]prometheus.HistogramOpts
53
54
summaries map [string ]prometheus.SummaryOpts
54
55
counters map [string ]prometheus.CounterOpts
@@ -75,6 +76,22 @@ func (t *Tracker) Set(ctx context.Context, name string, absolute float64, labels
75
76
t .collect (ctx , true , name , absolute , labelsAndValues )
76
77
}
77
78
79
+ // Reset unregisters and removes all registered collectors.
80
+ func (t * Tracker ) Reset () {
81
+ t .mu .Lock ()
82
+ defer t .mu .Unlock ()
83
+
84
+ for k := range t .collectors {
85
+ delete (t .collectors , k )
86
+ }
87
+
88
+ for _ , c := range t .registered {
89
+ t .Registry .Unregister (c )
90
+ }
91
+
92
+ t .registered = t .registered [:0 ]
93
+ }
94
+
78
95
// DeclareHistogram registers histogram metric for given name.
79
96
func (t * Tracker ) DeclareHistogram (name string , opts prometheus.HistogramOpts ) {
80
97
t .mu .Lock ()
@@ -211,6 +228,7 @@ func (t *Tracker) collect(ctx context.Context, isGauge bool, name string, value
211
228
collect (lb .values , value )
212
229
}
213
230
231
+ // nolint: dupl // Code uses unique symbols.
214
232
func (t * Tracker ) summary (
215
233
ctx context.Context ,
216
234
canonicalID identity ,
@@ -232,13 +250,16 @@ func (t *Tracker) summary(
232
250
t .ErrLogger (ctx , err , labels )
233
251
}
234
252
253
+ t .registered = append (t .registered , summary )
254
+
235
255
* collect = func (labelValues map [string ]string , value float64 ) {
236
256
summary .With (labelValues ).Observe (value )
237
257
}
238
258
239
259
return true
240
260
}
241
261
262
+ // nolint: dupl // Code uses unique symbols.
242
263
func (t * Tracker ) histogram (
243
264
ctx context.Context ,
244
265
canonicalID identity ,
@@ -260,13 +281,16 @@ func (t *Tracker) histogram(
260
281
t .ErrLogger (ctx , err , labels )
261
282
}
262
283
284
+ t .registered = append (t .registered , histogram )
285
+
263
286
* collect = func (labelValues map [string ]string , value float64 ) {
264
287
histogram .With (labelValues ).Observe (value )
265
288
}
266
289
267
290
return true
268
291
}
269
292
293
+ // nolint: dupl // Code uses unique symbols.
270
294
func (t * Tracker ) counter (
271
295
ctx context.Context ,
272
296
canonicalID identity ,
@@ -285,13 +309,16 @@ func (t *Tracker) counter(
285
309
t .ErrLogger (ctx , err , labels )
286
310
}
287
311
312
+ t .registered = append (t .registered , counter )
313
+
288
314
* collect = func (labelValues map [string ]string , value float64 ) {
289
315
counter .With (labelValues ).Add (value )
290
316
}
291
317
292
318
return true
293
319
}
294
320
321
+ // nolint: dupl // Code uses unique symbols.
295
322
func (t * Tracker ) gauge (
296
323
ctx context.Context ,
297
324
canonicalID identity ,
@@ -310,6 +337,8 @@ func (t *Tracker) gauge(
310
337
t .ErrLogger (ctx , err , labels )
311
338
}
312
339
340
+ t .registered = append (t .registered , gauge )
341
+
313
342
* collect = func (labelValues map [string ]string , value float64 ) {
314
343
gauge .With (labelValues ).Set (value )
315
344
}
0 commit comments