mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-25 13:44:05 -08:00
support unregistering discovery manager metrics (#13896)
Signed-off-by: David Ashpole <dashpole@google.com>
This commit is contained in:
parent
8b72ed77f8
commit
bbfc72b4e2
|
@ -169,6 +169,13 @@ func (m *Manager) Providers() []*Provider {
|
||||||
return m.providers
|
return m.providers
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnregisterMetrics unregisters manager metrics. It does not unregister
|
||||||
|
// service discovery or refresh metrics, whose lifecycle is managed independent
|
||||||
|
// of the discovery Manager.
|
||||||
|
func (m *Manager) UnregisterMetrics() {
|
||||||
|
m.metrics.Unregister(m.registerer)
|
||||||
|
}
|
||||||
|
|
||||||
// Run starts the background processing.
|
// Run starts the background processing.
|
||||||
func (m *Manager) Run() error {
|
func (m *Manager) Run() error {
|
||||||
go m.sender()
|
go m.sender()
|
||||||
|
|
|
@ -36,11 +36,11 @@ func TestMain(m *testing.M) {
|
||||||
testutil.TolerantVerifyLeak(m)
|
testutil.TolerantVerifyLeak(m)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTestMetrics(t *testing.T, reg prometheus.Registerer) (*RefreshMetricsManager, map[string]DiscovererMetrics) {
|
func NewTestMetrics(t *testing.T, reg prometheus.Registerer) (RefreshMetricsManager, map[string]DiscovererMetrics) {
|
||||||
refreshMetrics := NewRefreshMetrics(reg)
|
refreshMetrics := NewRefreshMetrics(reg)
|
||||||
sdMetrics, err := RegisterSDMetrics(reg, refreshMetrics)
|
sdMetrics, err := RegisterSDMetrics(reg, refreshMetrics)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
return &refreshMetrics, sdMetrics
|
return refreshMetrics, sdMetrics
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestTargetUpdatesOrder checks that the target updates are received in the expected order.
|
// TestTargetUpdatesOrder checks that the target updates are received in the expected order.
|
||||||
|
@ -1541,3 +1541,24 @@ func (t *testDiscoverer) update(tgs []*targetgroup.Group) {
|
||||||
<-t.ready
|
<-t.ready
|
||||||
t.up <- tgs
|
t.up <- tgs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUnregisterMetrics(t *testing.T) {
|
||||||
|
reg := prometheus.NewRegistry()
|
||||||
|
// Check that all metrics can be unregistered, allowing a second manager to be created.
|
||||||
|
for i := 0; i < 2; i++ {
|
||||||
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
|
||||||
|
refreshMetrics, sdMetrics := NewTestMetrics(t, reg)
|
||||||
|
|
||||||
|
discoveryManager := NewManager(ctx, log.NewNopLogger(), reg, sdMetrics)
|
||||||
|
// discoveryManager will be nil if there was an error configuring metrics.
|
||||||
|
require.NotNil(t, discoveryManager)
|
||||||
|
// Unregister all metrics.
|
||||||
|
discoveryManager.UnregisterMetrics()
|
||||||
|
for _, sdMetric := range sdMetrics {
|
||||||
|
sdMetric.Unregister()
|
||||||
|
}
|
||||||
|
refreshMetrics.Unregister()
|
||||||
|
cancel()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -99,3 +99,12 @@ func NewManagerMetrics(registerer prometheus.Registerer, sdManagerName string) (
|
||||||
|
|
||||||
return m, nil
|
return m, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Unregister unregisters all metrics.
|
||||||
|
func (m *Metrics) Unregister(registerer prometheus.Registerer) {
|
||||||
|
registerer.Unregister(m.FailedConfigs)
|
||||||
|
registerer.Unregister(m.DiscoveredTargets)
|
||||||
|
registerer.Unregister(m.ReceivedUpdates)
|
||||||
|
registerer.Unregister(m.DelayedUpdates)
|
||||||
|
registerer.Unregister(m.SentUpdates)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue