Merge pull request #78773 from logicalhan/base-registry

preload metrics for legacyregistry for backwards compatibility
This commit is contained in:
Kubernetes Prow Robot 2019-06-14 16:50:47 -07:00 committed by GitHub
commit aef21debe0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 54 additions and 2 deletions

View File

@ -10,6 +10,7 @@ go_library(
deps = [
"//staging/src/k8s.io/apimachinery/pkg/version:go_default_library",
"//staging/src/k8s.io/component-base/metrics:go_default_library",
"//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
],
)

View File

@ -18,9 +18,11 @@ package legacyregistry
import (
"fmt"
"sync"
"github.com/prometheus/client_golang/prometheus"
apimachineryversion "k8s.io/apimachinery/pkg/version"
"k8s.io/component-base/metrics"
"sync"
)
var globalRegistryFactory = metricsRegistryFactory{
@ -51,7 +53,11 @@ func SetRegistryFactoryVersion(ver apimachineryversion.Info) []error {
return nil
}
registrationErrs := make([]error, 0)
globalRegistryFactory.globalRegistry = metrics.NewKubeRegistry(ver)
preloadedMetrics := []prometheus.Collector{
prometheus.NewGoCollector(),
prometheus.NewProcessCollector(prometheus.ProcessCollectorOpts{}),
}
globalRegistryFactory.globalRegistry = metrics.NewPreloadedKubeRegistry(ver, preloadedMetrics...)
globalRegistryFactory.kubeVersion = &ver
for _, c := range globalRegistryFactory.registerQueue {
err := globalRegistryFactory.globalRegistry.Register(c)

View File

@ -193,3 +193,33 @@ func TestDeferredMustRegister(t *testing.T) {
},
"Did not panic even though we expected it.")
}
func TestPreloadedMetrics(t *testing.T) {
// reset the global registry for this test.
globalRegistryFactory = metricsRegistryFactory{
registerQueue: make([]metrics.KubeCollector, 0),
mustRegisterQueue: make([]metrics.KubeCollector, 0),
}
SetRegistryFactoryVersion(apimachineryversion.Info{
Major: "1",
Minor: "15",
GitVersion: "v1.15.0-alpha-1.12345",
})
// partial list of some preregistered metrics we expect
expectedMetricNames := []string{"go_gc_duration_seconds", "process_start_time_seconds"}
mf, err := globalRegistryFactory.globalRegistry.Gather()
if err != nil {
t.Errorf("Got unexpected error %v ", err)
}
metricNames := map[string]struct{}{}
for _, f := range mf {
metricNames[f.GetName()] = struct{}{}
}
for _, expectedMetric := range expectedMetricNames {
if _, ok := metricNames[expectedMetric]; !ok {
t.Errorf("Expected %v to be preregistered", expectedMetric)
}
}
}

View File

@ -94,3 +94,18 @@ 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
}