Path: blob/main/pkg/flow/internal/controller/wrap_registerer.go
5307 views
package controller12import (3"sync"45"github.com/prometheus/client_golang/prometheus"6)78type wrappedRegisterer struct {9mut sync.RWMutex10internalCollectors map[prometheus.Collector]struct{}11}1213// newWrappedRegisterer creates a wrapped register14func newWrappedRegisterer() *wrappedRegisterer {15return &wrappedRegisterer{internalCollectors: make(map[prometheus.Collector]struct{})}16}1718// Describe implements the interface19func (w *wrappedRegisterer) Describe(descs chan<- *prometheus.Desc) {20w.mut.RLock()21defer w.mut.RUnlock()2223for c := range w.internalCollectors {24c.Describe(descs)25}26}2728// Collect implements the interface29func (w *wrappedRegisterer) Collect(metrics chan<- prometheus.Metric) {30w.mut.RLock()31defer w.mut.RUnlock()3233for c := range w.internalCollectors {34c.Collect(metrics)35}36}3738// Register implements the interface39func (w *wrappedRegisterer) Register(collector prometheus.Collector) error {40w.mut.Lock()41defer w.mut.Unlock()4243w.internalCollectors[collector] = struct{}{}44return nil45}4647// MustRegister implements the interface48func (w *wrappedRegisterer) MustRegister(collector ...prometheus.Collector) {49w.mut.Lock()50defer w.mut.Unlock()5152for _, c := range collector {53w.internalCollectors[c] = struct{}{}54}55}5657// Unregister implements the interface58func (w *wrappedRegisterer) Unregister(collector prometheus.Collector) bool {59w.mut.Lock()60defer w.mut.Unlock()6162delete(w.internalCollectors, collector)63return true64}656667