in agentcfg/elasticsearch.go [100:140]
func (f *ElasticsearchFetcher) Run(ctx context.Context) error {
refresh := func() bool {
// refresh returns a bool that indicates whether Run should return
// immediately without error, e.g. due to invalid Elasticsearch config.
if err := f.refreshCache(ctx); err != nil {
f.logger.Error(fmt.Sprintf("refresh cache error: %s", err))
if f.invalidESCfg.Load() {
f.logger.Warn("stopping refresh cache background job: elasticsearch config is invalid")
return true
}
} else {
f.logger.Debug("refresh cache success")
}
return false
}
// Trigger initial run.
select {
case <-ctx.Done():
return ctx.Err()
default:
if stop := refresh(); stop {
return nil
}
}
// Then schedule subsequent runs.
t := time.NewTicker(f.cacheDuration)
defer t.Stop()
for {
select {
case <-ctx.Done():
return ctx.Err()
case <-t.C:
if stop := refresh(); stop {
return nil
}
}
}
}