in otelcollector/prometheusreceiver/targetallocator/manager.go [54:97]
func (m *Manager) Start(ctx context.Context, host component.Host, sm *scrape.Manager, dm *discovery.Manager, wh *web.Handler) error {
m.scrapeManager = sm
m.discoveryManager = dm
m.webHandler = wh
err := m.applyCfg()
if err != nil {
m.settings.Logger.Error("Failed to apply new scrape configuration", zap.Error(err))
return err
}
if m.cfg == nil {
// the target allocator is disabled
return nil
}
httpClient, err := m.cfg.ClientConfig.ToClient(ctx, host, m.settings.TelemetrySettings)
if err != nil {
m.settings.Logger.Error("Failed to create http client", zap.Error(err))
return err
}
m.settings.Logger.Info("Starting target allocator discovery")
// immediately sync jobs, not waiting for the first tick
savedHash, err := m.sync(uint64(0), httpClient)
if err != nil {
return err
}
go func() {
targetAllocatorIntervalTicker := time.NewTicker(m.cfg.Interval)
for {
select {
case <-targetAllocatorIntervalTicker.C:
hash, newErr := m.sync(savedHash, httpClient)
if newErr != nil {
m.settings.Logger.Error(newErr.Error())
continue
}
savedHash = hash
case <-m.shutdown:
targetAllocatorIntervalTicker.Stop()
m.settings.Logger.Info("Stopping target allocator")
return
}
}
}()
return nil
}