Alerting: Refactor NewPrometheusWriter function. (#101706)

* Alerting: Refactor NewPrometheusWriter function.

In order to re-use PrometheusWriter, changing the function take a
PrometheusWriterConfig instead of RecordingRulesSettings, and adapt the old
interface onto the new interface.

* Make linter happy
pull/101667/head^2
Steve Simpson 3 months ago committed by GitHub
parent 9e690bd620
commit eed07cf503
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      pkg/services/ngalert/ngalert.go
  2. 2
      pkg/services/ngalert/schedule/recording_rule_test.go
  3. 36
      pkg/services/ngalert/writer/prom.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

@ -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
}

@ -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),
)

Loading…
Cancel
Save