@@ -50,11 +50,13 @@ const (
5050)
5151
5252var (
53- factories = make (map [string ]func (config * NodeCollectorConfig , logger log.Logger ) (Collector , error ))
54- collectorStateGlobal = make (map [string ]bool )
55- collectorFlagState = make (map [string ]* bool )
56- availableCollectors = make ([]string , 0 )
57- forcedCollectors = map [string ]bool {} // collectors which have been explicitly enabled or disabled
53+ factories = make (map [string ]func (config * NodeCollectorConfig , logger log.Logger ) (Collector , error ))
54+ initiatedCollectorsMtx = sync.Mutex {}
55+ initiatedCollectors = make (map [string ]Collector )
56+ collectorStateGlobal = make (map [string ]bool )
57+ collectorFlagState = make (map [string ]* bool )
58+ availableCollectors = make ([]string , 0 )
59+ forcedCollectors = map [string ]bool {} // collectors which have been explicitly enabled or disabled
5860)
5961
6062func GetDefaults () map [string ]bool {
@@ -140,15 +142,22 @@ func NewNodeCollector(config *NodeCollectorConfig, logger log.Logger, filters ..
140142 }
141143 collectors := make (map [string ]Collector )
142144
145+ initiatedCollectorsMtx .Lock ()
146+ defer initiatedCollectorsMtx .Unlock ()
143147 for key , enabled := range config .Collectors {
144148 if ! enabled || (len (f ) > 0 && ! f [key ]) {
145149 continue
146150 }
147- collector , err := factories [key ](config , log .With (logger , "collector" , key ))
148- if err != nil {
149- return nil , err
151+ if collector , ok := initiatedCollectors [key ]; ok && config .AllowCachingOfCollectors {
152+ collectors [key ] = collector
153+ } else {
154+ collector , err := factories [key ](config , log .With (logger , "collector" , key ))
155+ if err != nil {
156+ return nil , err
157+ }
158+ collectors [key ] = collector
159+ initiatedCollectors [key ] = collector
150160 }
151- collectors [key ] = collector
152161 }
153162 return & NodeCollector {Collectors : collectors , logger : logger }, nil
154163}
0 commit comments