in internal/agentcfg/elasticsearch.go [150:205]
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.
tx := f.tracer.StartTransaction("ElasticsearchFetcher.refresh", "")
defer tx.End()
ctx = apm.ContextWithTransaction(ctx, tx)
if err := f.refreshCache(ctx); err != nil {
if e := apm.CaptureError(ctx, err); e != nil {
e.Send()
}
// Do not log as error when there is a fallback.
var logFunc func(string, ...interface{})
if f.fallbackFetcher == nil {
logFunc = f.logger.Errorf
} else {
logFunc = f.logger.Warnf
}
logFunc("refresh cache error: %s", err)
if f.invalidESCfg.Load() {
logFunc("stopping refresh cache background job: elasticsearch config is invalid")
return true
}
} else {
f.logger.Debugf("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
}
}
}
}