@@ -36,6 +36,7 @@ type Manager struct {
36
36
scrapeManager * scrape.Manager
37
37
discoveryManager * discovery.Manager
38
38
enableNativeHistograms bool
39
+ host component.Host
39
40
}
40
41
41
42
func NewManager (set receiver.Settings , cfg * Config , promCfg * promconfig.Config , enableNativeHistograms bool ) * Manager {
@@ -52,6 +53,8 @@ func NewManager(set receiver.Settings, cfg *Config, promCfg *promconfig.Config,
52
53
func (m * Manager ) Start (ctx context.Context , host component.Host , sm * scrape.Manager , dm * discovery.Manager ) error {
53
54
m .scrapeManager = sm
54
55
m .discoveryManager = dm
56
+ m .host = host
57
+
55
58
err := m .applyCfg ()
56
59
if err != nil {
57
60
m .settings .Logger .Error ("Failed to apply new scrape configuration" , zap .Error (err ))
@@ -61,14 +64,8 @@ func (m *Manager) Start(ctx context.Context, host component.Host, sm *scrape.Man
61
64
// the target allocator is disabled
62
65
return nil
63
66
}
64
- httpClient , err := m .cfg .ClientConfig .ToClient (ctx , host , m .settings .TelemetrySettings )
65
- if err != nil {
66
- m .settings .Logger .Error ("Failed to create http client" , zap .Error (err ))
67
- return err
68
- }
69
67
m .settings .Logger .Info ("Starting target allocator discovery" )
70
- // immediately sync jobs, not waiting for the first tick
71
- savedHash , err := m .sync (uint64 (0 ), httpClient )
68
+ savedHash , err := m .sync (ctx , uint64 (0 ))
72
69
if err != nil {
73
70
m .settings .Logger .Error ("Failed to sync target allocator" , zap .Error (err ))
74
71
}
@@ -77,7 +74,7 @@ func (m *Manager) Start(ctx context.Context, host component.Host, sm *scrape.Man
77
74
for {
78
75
select {
79
76
case <- targetAllocatorIntervalTicker .C :
80
- hash , newErr := m .sync (savedHash , httpClient )
77
+ hash , newErr := m .sync (ctx , savedHash )
81
78
if newErr != nil {
82
79
m .settings .Logger .Error (newErr .Error ())
83
80
continue
@@ -97,12 +94,18 @@ func (m *Manager) Shutdown() {
97
94
close (m .shutdown )
98
95
}
99
96
100
- // sync request jobs from targetAllocator and update underlying receiver, if the response does not match the provided compareHash .
101
- // baseDiscoveryCfg can be used to provide additional ScrapeConfigs which will be added to the retrieved jobs .
102
- func (m * Manager ) sync (compareHash uint64 , httpClient * http. Client ) (uint64 , error ) {
97
+ // sync requests jobs from targetAllocator and updates the underlying receiver .
98
+ // A fresh HTTP client is created on each sync so that any changes to certificate files are picked up .
99
+ func (m * Manager ) sync (ctx context. Context , compareHash uint64 ) (uint64 , error ) {
103
100
m .settings .Logger .Debug ("Syncing target allocator jobs" )
104
101
m .settings .Logger .Debug ("endpoint" , zap .String ("endpoint" , m .cfg .Endpoint ))
105
102
103
+ httpClient , err := m .cfg .ClientConfig .ToClient (ctx , m .host , m .settings .TelemetrySettings )
104
+ if err != nil {
105
+ m .settings .Logger .Error ("Failed to create http client" , zap .Error (err ))
106
+ return 0 , err
107
+ }
108
+
106
109
scrapeConfigsResponse , err := getScrapeConfigsResponse (httpClient , m .cfg .Endpoint )
107
110
if err != nil {
108
111
m .settings .Logger .Error ("Failed to retrieve job list" , zap .Error (err ))
0 commit comments