mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-26 21:17:23 +00:00
use noopRegistry for default global legacy prom registry and expose an http handler
This commit is contained in:
parent
8f4cc7d81f
commit
9c44ba22ca
@ -11,6 +11,8 @@ go_library(
|
|||||||
"//staging/src/k8s.io/apimachinery/pkg/version:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/version:go_default_library",
|
||||||
"//staging/src/k8s.io/component-base/metrics:go_default_library",
|
"//staging/src/k8s.io/component-base/metrics:go_default_library",
|
||||||
"//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
|
"//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
|
||||||
|
"//vendor/github.com/prometheus/client_golang/prometheus/promhttp:go_default_library",
|
||||||
|
"//vendor/github.com/prometheus/client_model/go:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -18,17 +18,31 @@ package legacyregistry
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net/http"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
|
"github.com/prometheus/client_golang/prometheus/promhttp"
|
||||||
|
dto "github.com/prometheus/client_model/go"
|
||||||
|
|
||||||
apimachineryversion "k8s.io/apimachinery/pkg/version"
|
apimachineryversion "k8s.io/apimachinery/pkg/version"
|
||||||
"k8s.io/component-base/metrics"
|
"k8s.io/component-base/metrics"
|
||||||
)
|
)
|
||||||
|
|
||||||
var globalRegistryFactory = metricsRegistryFactory{
|
var (
|
||||||
|
globalRegistryFactory = metricsRegistryFactory{
|
||||||
registerQueue: make([]metrics.KubeCollector, 0),
|
registerQueue: make([]metrics.KubeCollector, 0),
|
||||||
mustRegisterQueue: make([]metrics.KubeCollector, 0),
|
mustRegisterQueue: make([]metrics.KubeCollector, 0),
|
||||||
}
|
globalRegistry: noopRegistry{},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
type noopRegistry struct{}
|
||||||
|
|
||||||
|
func (noopRegistry) Register(metrics.KubeCollector) error { return nil }
|
||||||
|
func (noopRegistry) MustRegister(...metrics.KubeCollector) {}
|
||||||
|
func (noopRegistry) Unregister(metrics.KubeCollector) bool { return true }
|
||||||
|
func (noopRegistry) Gather() ([]*dto.MetricFamily, error) { return nil, nil }
|
||||||
|
|
||||||
type metricsRegistryFactory struct {
|
type metricsRegistryFactory struct {
|
||||||
globalRegistry metrics.KubeRegistry
|
globalRegistry metrics.KubeRegistry
|
||||||
@ -38,6 +52,13 @@ type metricsRegistryFactory struct {
|
|||||||
mustRegisterQueue []metrics.KubeCollector
|
mustRegisterQueue []metrics.KubeCollector
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// HandlerForGlobalRegistry returns a http handler for the global registry. This
|
||||||
|
// allows us to return a handler for the global registry without having to expose
|
||||||
|
// the global registry itself directly.
|
||||||
|
func HandlerForGlobalRegistry(opts promhttp.HandlerOpts) http.Handler {
|
||||||
|
return promhttp.HandlerFor(globalRegistryFactory.globalRegistry, opts)
|
||||||
|
}
|
||||||
|
|
||||||
// SetRegistryFactoryVersion sets the kubernetes version information for all
|
// SetRegistryFactoryVersion sets the kubernetes version information for all
|
||||||
// subsequent metrics registry initializations. Only the first call has an effect.
|
// subsequent metrics registry initializations. Only the first call has an effect.
|
||||||
// If a version is not set, then metrics registry creation will no-opt
|
// If a version is not set, then metrics registry creation will no-opt
|
||||||
@ -77,11 +98,12 @@ func Register(c metrics.KubeCollector) error {
|
|||||||
globalRegistryFactory.registrationLock.Lock()
|
globalRegistryFactory.registrationLock.Lock()
|
||||||
defer globalRegistryFactory.registrationLock.Unlock()
|
defer globalRegistryFactory.registrationLock.Unlock()
|
||||||
|
|
||||||
if globalRegistryFactory.kubeVersion != nil {
|
if globalRegistryFactory.globalRegistry == (noopRegistry{}) {
|
||||||
return globalRegistryFactory.globalRegistry.Register(c)
|
|
||||||
}
|
|
||||||
globalRegistryFactory.registerQueue = append(globalRegistryFactory.registerQueue, c)
|
globalRegistryFactory.registerQueue = append(globalRegistryFactory.registerQueue, c)
|
||||||
return nil
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return globalRegistryFactory.globalRegistry.Register(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MustRegister works like Register but registers any number of
|
// MustRegister works like Register but registers any number of
|
||||||
@ -91,11 +113,12 @@ func MustRegister(cs ...metrics.KubeCollector) {
|
|||||||
globalRegistryFactory.registrationLock.Lock()
|
globalRegistryFactory.registrationLock.Lock()
|
||||||
defer globalRegistryFactory.registrationLock.Unlock()
|
defer globalRegistryFactory.registrationLock.Unlock()
|
||||||
|
|
||||||
if globalRegistryFactory.kubeVersion != nil {
|
if globalRegistryFactory.globalRegistry == (noopRegistry{}) {
|
||||||
globalRegistryFactory.globalRegistry.MustRegister(cs...)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for _, c := range cs {
|
for _, c := range cs {
|
||||||
globalRegistryFactory.mustRegisterQueue = append(globalRegistryFactory.mustRegisterQueue, c)
|
globalRegistryFactory.mustRegisterQueue = append(globalRegistryFactory.mustRegisterQueue, c)
|
||||||
}
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
globalRegistryFactory.globalRegistry.MustRegister(cs...)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
@ -150,6 +150,7 @@ func TestDeferredRegister(t *testing.T) {
|
|||||||
globalRegistryFactory = metricsRegistryFactory{
|
globalRegistryFactory = metricsRegistryFactory{
|
||||||
registerQueue: make([]metrics.KubeCollector, 0),
|
registerQueue: make([]metrics.KubeCollector, 0),
|
||||||
mustRegisterQueue: make([]metrics.KubeCollector, 0),
|
mustRegisterQueue: make([]metrics.KubeCollector, 0),
|
||||||
|
globalRegistry: noopRegistry{},
|
||||||
}
|
}
|
||||||
var err error
|
var err error
|
||||||
err = Register(alphaDeprecatedCounter)
|
err = Register(alphaDeprecatedCounter)
|
||||||
@ -179,6 +180,7 @@ func TestDeferredMustRegister(t *testing.T) {
|
|||||||
globalRegistryFactory = metricsRegistryFactory{
|
globalRegistryFactory = metricsRegistryFactory{
|
||||||
registerQueue: make([]metrics.KubeCollector, 0),
|
registerQueue: make([]metrics.KubeCollector, 0),
|
||||||
mustRegisterQueue: make([]metrics.KubeCollector, 0),
|
mustRegisterQueue: make([]metrics.KubeCollector, 0),
|
||||||
|
globalRegistry: noopRegistry{},
|
||||||
}
|
}
|
||||||
MustRegister(alphaDeprecatedCounter)
|
MustRegister(alphaDeprecatedCounter)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user