Skip to content

Commit 2ce863d

Browse files
authored
Merge branch 'main' into PMM-13748-gssapi-auth-support
2 parents ddafb10 + f774e70 commit 2ce863d

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

exporter/exporter.go

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -273,8 +273,13 @@ func (e *Exporter) getClient(ctx context.Context) (*mongo.Client, error) {
273273
e.clientMu.Lock()
274274
defer e.clientMu.Unlock()
275275

276-
// If client is already initialized, return it.
276+
// If client is already initialized, and Ping is successful -- return it.
277277
if e.client != nil {
278+
err := e.client.Ping(ctx, nil)
279+
if err != nil {
280+
return nil, fmt.Errorf("cannot connect to MongoDB: %w", err)
281+
}
282+
278283
return e.client, nil
279284
}
280285

@@ -300,20 +305,25 @@ func (e *Exporter) getClient(ctx context.Context) (*mongo.Client, error) {
300305
// run for hooking up custom HTTP servers.
301306
func (e *Exporter) Handler() http.Handler {
302307
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
303-
seconds, err := strconv.Atoi(r.Header.Get("X-Prometheus-Scrape-Timeout-Seconds"))
304-
// To support older ones vmagents.
305-
if err != nil {
306-
seconds = 10
308+
scrapeTimeoutHeader := r.Header.Get("X-Prometheus-Scrape-Timeout-Seconds")
309+
seconds := 10.0
310+
311+
if scrapeTimeoutHeader != "" {
312+
if parsedSeconds, err := strconv.ParseFloat(scrapeTimeoutHeader, 64); err == nil {
313+
seconds = parsedSeconds
314+
} else {
315+
e.logger.Info("Invalid X-Prometheus-Scrape-Timeout-Seconds header", "error", err)
316+
}
307317
}
308-
seconds -= e.opts.TimeoutOffset
318+
seconds -= float64(e.opts.TimeoutOffset)
309319

310320
var client *mongo.Client
311-
ctx, cancel := context.WithTimeout(r.Context(), time.Duration(seconds)*time.Second)
321+
ctx, cancel := context.WithTimeout(r.Context(), time.Duration(seconds*float64(time.Second)))
312322
defer cancel()
313323

314324
requestOpts := GetRequestOpts(r.URL.Query()["collect[]"], e.opts)
315325

316-
client, err = e.getClient(ctx)
326+
client, err := e.getClient(ctx)
317327
if err != nil {
318328
e.logger.Error("Cannot connect to MongoDB", "error", err)
319329
}

0 commit comments

Comments
 (0)