Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/pkg/flow/internal/controller/wrap_registerer.go
5307 views
1
package controller
2
3
import (
4
"sync"
5
6
"github.com/prometheus/client_golang/prometheus"
7
)
8
9
type wrappedRegisterer struct {
10
mut sync.RWMutex
11
internalCollectors map[prometheus.Collector]struct{}
12
}
13
14
// newWrappedRegisterer creates a wrapped register
15
func newWrappedRegisterer() *wrappedRegisterer {
16
return &wrappedRegisterer{internalCollectors: make(map[prometheus.Collector]struct{})}
17
}
18
19
// Describe implements the interface
20
func (w *wrappedRegisterer) Describe(descs chan<- *prometheus.Desc) {
21
w.mut.RLock()
22
defer w.mut.RUnlock()
23
24
for c := range w.internalCollectors {
25
c.Describe(descs)
26
}
27
}
28
29
// Collect implements the interface
30
func (w *wrappedRegisterer) Collect(metrics chan<- prometheus.Metric) {
31
w.mut.RLock()
32
defer w.mut.RUnlock()
33
34
for c := range w.internalCollectors {
35
c.Collect(metrics)
36
}
37
}
38
39
// Register implements the interface
40
func (w *wrappedRegisterer) Register(collector prometheus.Collector) error {
41
w.mut.Lock()
42
defer w.mut.Unlock()
43
44
w.internalCollectors[collector] = struct{}{}
45
return nil
46
}
47
48
// MustRegister implements the interface
49
func (w *wrappedRegisterer) MustRegister(collector ...prometheus.Collector) {
50
w.mut.Lock()
51
defer w.mut.Unlock()
52
53
for _, c := range collector {
54
w.internalCollectors[c] = struct{}{}
55
}
56
}
57
58
// Unregister implements the interface
59
func (w *wrappedRegisterer) Unregister(collector prometheus.Collector) bool {
60
w.mut.Lock()
61
defer w.mut.Unlock()
62
63
delete(w.internalCollectors, collector)
64
return true
65
}
66
67