Add caching back in.

This commit is contained in:
matt durham 2023-10-05 09:12:03 -04:00
parent 7023184297
commit fe9ec398f9
No known key found for this signature in database
GPG key ID: A62E920AE398897B
3 changed files with 21 additions and 10 deletions

View file

@ -50,11 +50,13 @@ const (
) )
var ( var (
factories = make(map[string]func(config *NodeCollectorConfig, logger log.Logger) (Collector, error)) factories = make(map[string]func(config *NodeCollectorConfig, logger log.Logger) (Collector, error))
collectorStateGlobal = make(map[string]bool) initiatedCollectorsMtx = sync.Mutex{}
collectorFlagState = make(map[string]*bool) initiatedCollectors = make(map[string]Collector)
availableCollectors = make([]string, 0) collectorStateGlobal = make(map[string]bool)
forcedCollectors = map[string]bool{} // collectors which have been explicitly enabled or disabled collectorFlagState = make(map[string]*bool)
availableCollectors = make([]string, 0)
forcedCollectors = map[string]bool{} // collectors which have been explicitly enabled or disabled
) )
func GetDefaults() map[string]bool { func GetDefaults() map[string]bool {
@ -140,15 +142,22 @@ func NewNodeCollector(config *NodeCollectorConfig, logger log.Logger, filters ..
} }
collectors := make(map[string]Collector) collectors := make(map[string]Collector)
initiatedCollectorsMtx.Lock()
defer initiatedCollectorsMtx.Unlock()
for key, enabled := range config.Collectors { for key, enabled := range config.Collectors {
if !enabled || (len(f) > 0 && !f[key]) { if !enabled || (len(f) > 0 && !f[key]) {
continue continue
} }
collector, err := factories[key](config, log.With(logger, "collector", key)) if collector, ok := initiatedCollectors[key]; ok && config.AllowCachingOfCollectors {
if err != nil { collectors[key] = collector
return nil, err } else {
collector, err := factories[key](config, log.With(logger, "collector", key))
if err != nil {
return nil, err
}
collectors[key] = collector
initiatedCollectors[key] = collector
} }
collectors[key] = collector
} }
return &NodeCollector{Collectors: collectors, logger: logger}, nil return &NodeCollector{Collectors: collectors, logger: logger}, nil
} }

View file

@ -43,7 +43,8 @@ type NodeCollectorConfig struct {
VmStat VmStatConfig VmStat VmStatConfig
Wifi WifiConfig Wifi WifiConfig
Collectors map[string]bool Collectors map[string]bool
AllowCachingOfCollectors bool
} }
type WifiConfig struct { type WifiConfig struct {

View file

@ -189,6 +189,7 @@ func main() {
runtime.GOMAXPROCS(*maxProcs) runtime.GOMAXPROCS(*maxProcs)
level.Debug(logger).Log("msg", "Go MAXPROCS", "procs", runtime.GOMAXPROCS(0)) level.Debug(logger).Log("msg", "Go MAXPROCS", "procs", runtime.GOMAXPROCS(0))
collectorConfig.Collectors = collector.GetFlagDefaults() collectorConfig.Collectors = collector.GetFlagDefaults()
collectorConfig.AllowCachingOfCollectors = true
http.Handle(*metricsPath, newHandler(!*disableExporterMetrics, *maxRequests, collectorConfig, logger)) http.Handle(*metricsPath, newHandler(!*disableExporterMetrics, *maxRequests, collectorConfig, logger))
if *metricsPath != "/" { if *metricsPath != "/" {
landingConfig := web.LandingConfig{ landingConfig := web.LandingConfig{