diff --git a/pkg/services/ngalert/ngalert.go b/pkg/services/ngalert/ngalert.go index 8688325d3ca..f09a20609d2 100644 --- a/pkg/services/ngalert/ngalert.go +++ b/pkg/services/ngalert/ngalert.go @@ -758,7 +758,7 @@ func createRecordingWriter(featureToggles featuremgmt.FeatureToggles, settings s logger := log.New("ngalert.writer") if settings.Enabled { - return writer.NewPrometheusWriter(settings, httpClientProvider, clock, logger, m) + return writer.NewPrometheusWriterWithSettings(settings, httpClientProvider, clock, logger, m) } return writer.NoopWriter{}, nil diff --git a/pkg/services/ngalert/schedule/recording_rule_test.go b/pkg/services/ngalert/schedule/recording_rule_test.go index c880b1d417f..8e04ff21886 100644 --- a/pkg/services/ngalert/schedule/recording_rule_test.go +++ b/pkg/services/ngalert/schedule/recording_rule_test.go @@ -546,7 +546,7 @@ func withQueryForHealth(health string) models.AlertRuleMutator { func setupWriter(t *testing.T, target *writer.TestRemoteWriteTarget, reg prometheus.Registerer) *writer.PrometheusWriter { provider := testClientProvider{} m := metrics.NewNGAlert(reg) - wr, err := writer.NewPrometheusWriter(target.ClientSettings(), provider, clock.NewMock(), log.NewNopLogger(), m.GetRemoteWriterMetrics()) + wr, err := writer.NewPrometheusWriterWithSettings(target.ClientSettings(), provider, clock.NewMock(), log.NewNopLogger(), m.GetRemoteWriterMetrics()) require.NoError(t, err) return wr } diff --git a/pkg/services/ngalert/writer/prom.go b/pkg/services/ngalert/writer/prom.go index fb759b0494d..5ec05f56571 100644 --- a/pkg/services/ngalert/writer/prom.go +++ b/pkg/services/ngalert/writer/prom.go @@ -120,7 +120,13 @@ type PrometheusWriter struct { metrics *metrics.RemoteWriter } -func NewPrometheusWriter( +type PrometheusWriterConfig struct { + URL string + HTTPOptions httpclient.Options + Timeout time.Duration +} + +func NewPrometheusWriterWithSettings( settings setting.RecordingRuleSettings, httpClientProvider HttpClientProvider, clock clock.Clock, @@ -136,18 +142,34 @@ func NewPrometheusWriter( headers.Add(k, v) } - cl, err := httpClientProvider.New(httpclient.Options{ - BasicAuth: createAuthOpts(settings.BasicAuthUsername, settings.BasicAuthPassword), - Header: headers, - }) + cfg := PrometheusWriterConfig{ + URL: settings.URL, + HTTPOptions: httpclient.Options{ + BasicAuth: createAuthOpts(settings.BasicAuthUsername, settings.BasicAuthPassword), + Header: headers, + }, + Timeout: settings.Timeout, + } + + return NewPrometheusWriter(cfg, httpClientProvider, clock, l, metrics) +} + +func NewPrometheusWriter( + cfg PrometheusWriterConfig, + httpClientProvider HttpClientProvider, + clock clock.Clock, + l log.Logger, + metrics *metrics.RemoteWriter, +) (*PrometheusWriter, error) { + cl, err := httpClientProvider.New(cfg.HTTPOptions) if err != nil { return nil, err } clientCfg := promremote.NewConfig( promremote.UserAgent("grafana-recording-rule"), - promremote.WriteURLOption(settings.URL), - promremote.HTTPClientTimeoutOption(settings.Timeout), + promremote.WriteURLOption(cfg.URL), + promremote.HTTPClientTimeoutOption(cfg.Timeout), promremote.HTTPClientOption(cl), )