From a3d705f94723ae98c5325a50e34305e883c43136 Mon Sep 17 00:00:00 2001 From: Anders Swanson Date: Fri, 20 Dec 2024 08:09:00 -0800 Subject: [PATCH] Scrape metrics immediately for scrape.interval Signed-off-by: Anders Swanson --- collector/collector.go | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/collector/collector.go b/collector/collector.go index 8d4ed42..25d0f38 100644 --- a/collector/collector.go +++ b/collector/collector.go @@ -220,6 +220,9 @@ func (e *Exporter) Collect(ch chan<- prometheus.Metric) { // rather than letting it be per Collect call func (e *Exporter) RunScheduledScrapes(ctx context.Context, si time.Duration) { e.scrapeInterval = &si + + e.doScrape(time.Now()) + ticker := time.NewTicker(si) defer ticker.Stop() @@ -227,16 +230,20 @@ func (e *Exporter) RunScheduledScrapes(ctx context.Context, si time.Duration) { select { case tick := <-ticker.C: - e.mu.Lock() // ensure no simultaneous scrapes - e.scheduledScrape(&tick) - e.lastTick = &tick - e.mu.Unlock() + e.doScrape(tick) case <-ctx.Done(): return } } } +func (e *Exporter) doScrape(tick time.Time) { + e.mu.Lock() // ensure no simultaneous scrapes + e.scheduledScrape(&tick) + e.lastTick = &tick + e.mu.Unlock() +} + func (e *Exporter) scheduledScrape(tick *time.Time) { metricCh := make(chan prometheus.Metric, 5) @@ -387,7 +394,11 @@ func (e *Exporter) connect() error { e.user = "" } level.Info(e.logger).Log("msg", msg) - P.Username, P.Password, P.ConnectString, P.ExternalAuth = e.user, godror.NewPassword(e.password), e.connectString, e.externalAuth + externalAuth := sql.NullBool{ + Bool: e.externalAuth, + Valid: true, + } + P.Username, P.Password, P.ConnectString, P.ExternalAuth = e.user, godror.NewPassword(e.password), e.connectString, externalAuth // if TNS_ADMIN env var is set, set ConfigDir to that location P.ConfigDir = e.configDir