otelcollector/otel-allocator/internal/allocation/per_node.go (45 lines of code) (raw):

// Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 package allocation import ( "fmt" "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/internal/target" ) const perNodeStrategyName = "per-node" var _ Strategy = &perNodeStrategy{} type perNodeStrategy struct { collectorByNode map[string]*Collector fallbackStrategy Strategy } func newPerNodeStrategy() Strategy { return &perNodeStrategy{ collectorByNode: make(map[string]*Collector), fallbackStrategy: nil, } } func (s *perNodeStrategy) SetFallbackStrategy(fallbackStrategy Strategy) { s.fallbackStrategy = fallbackStrategy } func (s *perNodeStrategy) GetName() string { return perNodeStrategyName } func (s *perNodeStrategy) GetCollectorForTarget(collectors map[string]*Collector, item *target.Item) (*Collector, error) { targetNodeName := item.GetNodeName() if targetNodeName == "" && s.fallbackStrategy != nil { return s.fallbackStrategy.GetCollectorForTarget(collectors, item) } collector, ok := s.collectorByNode[targetNodeName] if !ok { return nil, fmt.Errorf("could not find collector for node %s", targetNodeName) } return collectors[collector.Name], nil } func (s *perNodeStrategy) SetCollectors(collectors map[string]*Collector) { clear(s.collectorByNode) for _, collector := range collectors { if collector.NodeName != "" { s.collectorByNode[collector.NodeName] = collector } } if s.fallbackStrategy != nil { s.fallbackStrategy.SetCollectors(collectors) } }