From 12a4ee235ff5e6528acd50274ae7facc276174ed Mon Sep 17 00:00:00 2001 From: Han Kang Date: Thu, 8 Aug 2019 13:39:29 -0700 Subject: [PATCH] expose ability to register native prometheus collectors --- .../metrics/legacyregistry/registry.go | 13 ++++--- .../k8s.io/component-base/metrics/registry.go | 37 +++++++++++-------- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/staging/src/k8s.io/component-base/metrics/legacyregistry/registry.go b/staging/src/k8s.io/component-base/metrics/legacyregistry/registry.go index 521ded64e9e..32595ed31a9 100644 --- a/staging/src/k8s.io/component-base/metrics/legacyregistry/registry.go +++ b/staging/src/k8s.io/component-base/metrics/legacyregistry/registry.go @@ -40,10 +40,12 @@ var ( type noopRegistry struct{} -func (noopRegistry) Register(metrics.Registerable) error { return nil } -func (noopRegistry) MustRegister(...metrics.Registerable) {} -func (noopRegistry) Unregister(metrics.Registerable) bool { return true } -func (noopRegistry) Gather() ([]*dto.MetricFamily, error) { return nil, nil } +func (noopRegistry) Register(metrics.Registerable) error { return nil } +func (noopRegistry) MustRegister(...metrics.Registerable) {} +func (noopRegistry) RawRegister(prometheus.Collector) error { return nil } +func (noopRegistry) RawMustRegister(...prometheus.Collector) {} +func (noopRegistry) Unregister(metrics.Registerable) bool { return true } +func (noopRegistry) Gather() ([]*dto.MetricFamily, error) { return nil, nil } type metricsRegistryFactory struct { globalRegistry metrics.KubeRegistry @@ -79,7 +81,8 @@ func SetRegistryFactoryVersion(ver apimachineryversion.Info) []error { prometheus.NewGoCollector(), prometheus.NewProcessCollector(prometheus.ProcessCollectorOpts{}), } - globalRegistryFactory.globalRegistry = metrics.NewPreloadedKubeRegistry(ver, preloadedMetrics...) + globalRegistryFactory.globalRegistry = metrics.NewKubeRegistry(ver) + globalRegistryFactory.globalRegistry.RawMustRegister(preloadedMetrics...) globalRegistryFactory.kubeVersion = &ver for _, c := range globalRegistryFactory.registerQueue { err := globalRegistryFactory.globalRegistry.Register(c) diff --git a/staging/src/k8s.io/component-base/metrics/registry.go b/staging/src/k8s.io/component-base/metrics/registry.go index 237ef69c92f..b9c7eabbbee 100644 --- a/staging/src/k8s.io/component-base/metrics/registry.go +++ b/staging/src/k8s.io/component-base/metrics/registry.go @@ -57,6 +57,10 @@ type Registerable interface { // KubeRegistry is an interface which implements a subset of prometheus.Registerer and // prometheus.Gatherer interfaces type KubeRegistry interface { + // Deprecated + RawRegister(prometheus.Collector) error + // Deprecated + RawMustRegister(...prometheus.Collector) Register(Registerable) error MustRegister(...Registerable) Unregister(Registerable) bool @@ -96,6 +100,24 @@ func (kr *kubeRegistry) MustRegister(cs ...Registerable) { kr.PromRegistry.MustRegister(metrics...) } +// RawRegister takes a native prometheus.Collector and registers the collector +// to the registry. This bypasses metrics safety checks, so should only be used +// to register custom prometheus collectors. +// +// Deprecated +func (kr *kubeRegistry) RawRegister(c prometheus.Collector) error { + return kr.PromRegistry.Register(c) +} + +// RawMustRegister takes a native prometheus.Collector and registers the collector +// to the registry. This bypasses metrics safety checks, so should only be used +// to register custom prometheus collectors. +// +// Deprecated +func (kr *kubeRegistry) RawMustRegister(cs ...prometheus.Collector) { + kr.PromRegistry.MustRegister(cs...) +} + // Unregister unregisters the Collector that equals the Collector passed // in as an argument. (Two Collectors are considered equal if their // Describe method yields the same set of descriptors.) The function @@ -125,18 +147,3 @@ func NewKubeRegistry(v apimachineryversion.Info) KubeRegistry { version: parseVersion(v), } } - -// NewPreloadedKubeRegistry creates a new Registry with preloaded prometheus collectors -// already registered. This is exposed specifically to maintain backwards -// compatibility with the global prometheus registry. -// -// Deprecated -func NewPreloadedKubeRegistry(v apimachineryversion.Info, cs ...prometheus.Collector) KubeRegistry { - registry := &kubeRegistry{ - PromRegistry: prometheus.NewRegistry(), - version: parseVersion(v), - } - - registry.PromRegistry.MustRegister(cs...) - return registry -}