diff --git a/staging/src/k8s.io/component-base/metrics/collector.go b/staging/src/k8s.io/component-base/metrics/collector.go index 9604ab18fa7..382ce5ce77d 100644 --- a/staging/src/k8s.io/component-base/metrics/collector.go +++ b/staging/src/k8s.io/component-base/metrics/collector.go @@ -37,6 +37,9 @@ type StableCollector interface { // Create will initialize all Desc and it intends to be called by registry. Create(version *semver.Version, self StableCollector) bool + + // HiddenMetrics tells the list of hidden metrics with fqName. + HiddenMetrics() []string } // BaseStableCollector which implements almost all of the methods defined by StableCollector @@ -159,5 +162,13 @@ func (bsc *BaseStableCollector) Create(version *semver.Version, self StableColle return false } +// HiddenMetrics tells the list of hidden metrics with fqName. +func (bsc *BaseStableCollector) HiddenMetrics() (fqNames []string) { + for i := range bsc.hidden { + fqNames = append(fqNames, bsc.hidden[i].fqName) + } + return +} + // Check if our BaseStableCollector implements necessary interface var _ StableCollector = &BaseStableCollector{} diff --git a/staging/src/k8s.io/component-base/metrics/registry.go b/staging/src/k8s.io/component-base/metrics/registry.go index a2fd8a06cdc..4265b6b6663 100644 --- a/staging/src/k8s.io/component-base/metrics/registry.go +++ b/staging/src/k8s.io/component-base/metrics/registry.go @@ -131,7 +131,9 @@ type kubeRegistry struct { PromRegistry version semver.Version hiddenCollectors map[string]Registerable // stores all collectors that has been hidden + stableCollectors []StableCollector // stores all stable collector hiddenCollectorsLock sync.RWMutex + stableCollectorsLock sync.RWMutex } // Register registers a new Collector to be included in metrics @@ -166,10 +168,11 @@ func (kr *kubeRegistry) MustRegister(cs ...Registerable) { // CustomRegister registers a new custom collector. func (kr *kubeRegistry) CustomRegister(c StableCollector) error { + kr.trackStableCollectors(c) + if c.Create(&kr.version, c) { return kr.PromRegistry.Register(c) } - return nil } @@ -177,6 +180,8 @@ func (kr *kubeRegistry) CustomRegister(c StableCollector) error { // StableCollectors and panics upon the first registration that causes an // error. func (kr *kubeRegistry) CustomMustRegister(cs ...StableCollector) { + kr.trackStableCollectors(cs...) + collectors := make([]prometheus.Collector, 0, len(cs)) for _, c := range cs { if c.Create(&kr.version, c) { @@ -234,6 +239,14 @@ func (kr *kubeRegistry) trackHiddenCollector(c Registerable) { kr.hiddenCollectors[c.FQName()] = c } +// trackStableCollectors stores all custom collectors. +func (kr *kubeRegistry) trackStableCollectors(cs ...StableCollector) { + kr.stableCollectorsLock.Lock() + defer kr.stableCollectorsLock.Unlock() + + kr.stableCollectors = append(kr.stableCollectors, cs...) +} + // enableHiddenCollectors will re-register all of the hidden collectors. func (kr *kubeRegistry) enableHiddenCollectors() { kr.hiddenCollectorsLock.Lock()