diff --git a/plugins/metrics/pkg/agent/node.go b/plugins/metrics/pkg/agent/node.go index 6edbdb1bdf..cbe566e7c7 100644 --- a/plugins/metrics/pkg/agent/node.go +++ b/plugins/metrics/pkg/agent/node.go @@ -53,6 +53,9 @@ type MetricsNode struct { listeners []chan<- *node.MetricsCapabilityConfig conditions health.ConditionTracker + + nodeDriverMu sync.RWMutex + nodeDriver drivers.MetricsNodeDriver } func NewMetricsNode(ct health.ConditionTracker, lg *zap.SugaredLogger) *MetricsNode { @@ -122,6 +125,13 @@ func (m *MetricsNode) SetRemoteWriter(client clients.Locker[remotewrite.RemoteWr m.targetRunner.SetRemoteWriteClient(client) } +func (m *MetricsNode) SetNodeDriver(driver drivers.MetricsNodeDriver) { + m.nodeDriverMu.Lock() + defer m.nodeDriverMu.Unlock() + + m.nodeDriver = driver +} + func (m *MetricsNode) Info(_ context.Context, _ *emptypb.Empty) (*capabilityv1.Details, error) { return &capabilityv1.Details{ Name: wellknown.CapabilityMetrics, @@ -203,12 +213,18 @@ func (m *MetricsNode) GetTargetStatus(ctx context.Context, request *remoteread.T } func (m *MetricsNode) Discover(ctx context.Context, request *remoteread.DiscoveryRequest) (*remoteread.DiscoveryResponse, error) { - driver, err := drivers.GetNodeDriver("external-operator") - if err != nil { - return nil, fmt.Errorf("could not get driver: %w", err) + m.nodeDriverMu.RLock() + defer m.nodeDriverMu.RUnlock() + + if m.nodeDriver == nil { + m.logger.Warnf("no node driver available for discvoery") + + return &remoteread.DiscoveryResponse{ + Entries: []*remoteread.DiscoveryEntry{}, + }, nil } - entries, err := driver.DiscoverPrometheuses(ctx, *request.Namespace) + entries, err := m.nodeDriver.DiscoverPrometheuses(ctx, *request.Namespace) if err != nil { return nil, fmt.Errorf("could not discover Prometheus instances: %w", err) } diff --git a/plugins/metrics/pkg/agent/plugin.go b/plugins/metrics/pkg/agent/plugin.go index 149d297480..cb24e1c4d6 100644 --- a/plugins/metrics/pkg/agent/plugin.go +++ b/plugins/metrics/pkg/agent/plugin.go @@ -51,6 +51,7 @@ func NewPlugin(ctx context.Context) *Plugin { ).Info("node driver is available") drivers.RegisterNodeDriver(d) p.node.AddConfigListener(drivers.NewListenerFunc(ctx, d.ConfigureNode)) + p.node.SetNodeDriver(d) } p.node.AddConfigListener(drivers.NewListenerFunc(ctx, p.onConfigUpdated))