Merge pull request #2048 from prometheus/init-collectors

Only initiate collectors once
This commit is contained in:
Julien Pivotto 2021-06-04 13:55:33 +02:00 committed by GitHub
commit 5b13775dc8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -50,9 +50,11 @@ const (
) )
var ( var (
factories = make(map[string]func(logger log.Logger) (Collector, error)) factories = make(map[string]func(logger log.Logger) (Collector, error))
collectorState = make(map[string]*bool) initiatedCollectorsMtx = sync.Mutex{}
forcedCollectors = map[string]bool{} // collectors which have been explicitly enabled or disabled initiatedCollectors = make(map[string]Collector)
collectorState = make(map[string]*bool)
forcedCollectors = map[string]bool{} // collectors which have been explicitly enabled or disabled
) )
func registerCollector(collector string, isDefaultEnabled bool, factory func(logger log.Logger) (Collector, error)) { func registerCollector(collector string, isDefaultEnabled bool, factory func(logger log.Logger) (Collector, error)) {
@ -115,15 +117,21 @@ func NewNodeCollector(logger log.Logger, filters ...string) (*NodeCollector, err
f[filter] = true f[filter] = true
} }
collectors := make(map[string]Collector) collectors := make(map[string]Collector)
initiatedCollectorsMtx.Lock()
defer initiatedCollectorsMtx.Unlock()
for key, enabled := range collectorState { for key, enabled := range collectorState {
if *enabled { if !*enabled || (len(f) > 0 && !f[key]) {
continue
}
if collector, ok := initiatedCollectors[key]; ok {
collectors[key] = collector
} else {
collector, err := factories[key](log.With(logger, "collector", key)) collector, err := factories[key](log.With(logger, "collector", key))
if err != nil { if err != nil {
return nil, err return nil, err
} }
if len(f) == 0 || f[key] { collectors[key] = collector
collectors[key] = collector initiatedCollectors[key] = collector
}
} }
} }
return &NodeCollector{Collectors: collectors, logger: logger}, nil return &NodeCollector{Collectors: collectors, logger: logger}, nil