From 4d028a7903ac66db5795056f654c8b0c03b7c90a Mon Sep 17 00:00:00 2001 From: RainbowMango Date: Tue, 26 Nov 2019 21:45:26 +0800 Subject: [PATCH] Extend Registerable interface with FQName() and track collector by name. --- staging/src/k8s.io/component-base/metrics/metric.go | 5 +++++ .../src/k8s.io/component-base/metrics/registry.go | 12 ++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/staging/src/k8s.io/component-base/metrics/metric.go b/staging/src/k8s.io/component-base/metrics/metric.go index 3c62434e101..c0383d01218 100644 --- a/staging/src/k8s.io/component-base/metrics/metric.go +++ b/staging/src/k8s.io/component-base/metrics/metric.go @@ -158,6 +158,11 @@ func (r *lazyMetric) ClearState() { r.createOnce = *(new(sync.Once)) } +// FQName returns the fully-qualified metric name of the collector. +func (r *lazyMetric) FQName() string { + return r.fqName +} + /* This code is directly lifted from the prometheus codebase. It's a convenience struct which allows you satisfy the Collector interface automatically if you already satisfy the Metric interface. diff --git a/staging/src/k8s.io/component-base/metrics/registry.go b/staging/src/k8s.io/component-base/metrics/registry.go index ed018332c73..a2fd8a06cdc 100644 --- a/staging/src/k8s.io/component-base/metrics/registry.go +++ b/staging/src/k8s.io/component-base/metrics/registry.go @@ -104,6 +104,9 @@ type Registerable interface { // ClearState will clear all the states marked by Create. ClearState() + + // FQName returns the fully-qualified metric name of the collector. + FQName() string } // KubeRegistry is an interface which implements a subset of prometheus.Registerer and @@ -127,7 +130,7 @@ type KubeRegistry interface { type kubeRegistry struct { PromRegistry version semver.Version - hiddenCollectors []Registerable // stores all collectors that has been hidden + hiddenCollectors map[string]Registerable // stores all collectors that has been hidden hiddenCollectorsLock sync.RWMutex } @@ -228,7 +231,7 @@ func (kr *kubeRegistry) trackHiddenCollector(c Registerable) { kr.hiddenCollectorsLock.Lock() defer kr.hiddenCollectorsLock.Unlock() - kr.hiddenCollectors = append(kr.hiddenCollectors, c) + kr.hiddenCollectors[c.FQName()] = c } // enableHiddenCollectors will re-register all of the hidden collectors. @@ -245,8 +248,9 @@ func (kr *kubeRegistry) enableHiddenCollectors() { func newKubeRegistry(v apimachineryversion.Info) *kubeRegistry { r := &kubeRegistry{ - PromRegistry: prometheus.NewRegistry(), - version: parseVersion(v), + PromRegistry: prometheus.NewRegistry(), + version: parseVersion(v), + hiddenCollectors: make(map[string]Registerable), } registriesLock.Lock()