Skip to content

Commit ccf4ddb

Browse files
committed
Refactoring fixups
1 parent a1d4089 commit ccf4ddb

File tree

3 files changed

+21
-9
lines changed

3 files changed

+21
-9
lines changed

pkg/querier/querier_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,8 @@ func TestMergeQuerierSortsMetricLabels(t *testing.T) {
110110
}
111111
m, err := labels.NewMatcher(labels.MatchEqual, model.MetricNameLabel, "testmetric")
112112
require.NoError(t, err)
113-
ss := mq.Select(m)
113+
ss, err := mq.Select(m)
114+
require.NoError(t, err)
114115
require.NoError(t, ss.Err())
115116
ss.Next()
116117
require.NoError(t, ss.Err())

pkg/ruler/ruler.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package ruler
22

33
import (
44
native_ctx "context"
5+
"crypto/md5"
6+
"encoding/json"
57
"flag"
68
"fmt"
79
"net/http"
@@ -133,9 +135,11 @@ func (rn *rulerNotifier) run() {
133135
if err := rn.sdManager.Run(rn.sdCtx); err != nil {
134136
level.Error(rn.logger).Log("msg", "error starting notifier discovery manager", "err", err)
135137
}
138+
rn.wg.Done()
136139
}()
137140
go func() {
138141
rn.notifier.Run(rn.sdManager.SyncCh())
142+
rn.wg.Done()
139143
}()
140144
}
141145

@@ -144,13 +148,19 @@ func (rn *rulerNotifier) applyConfig(cfg *config.Config) error {
144148
return err
145149
}
146150

147-
amConfigs := cfg.AlertingConfig.AlertmanagerConfigs
148-
if len(amConfigs) != 1 {
149-
return fmt.Errorf("ruler alerting config should have exactly one AlertmanagerConfig")
151+
sdCfgs := make(map[string]sd_config.ServiceDiscoveryConfig)
152+
for _, v := range cfg.AlertingConfig.AlertmanagerConfigs {
153+
// AlertmanagerConfigs doesn't hold an unique identifier so we use the config hash as the identifier.
154+
b, err := json.Marshal(v)
155+
if err != nil {
156+
return err
157+
}
158+
// This hash needs to be identical to the one computed in the notifier in
159+
// https://github.com/prometheus/prometheus/blob/719c579f7b917b384c3d629752dea026513317dc/notifier/notifier.go#L265
160+
// This kind of sucks, but it's done in Prometheus in main.go in the same way.
161+
sdCfgs[fmt.Sprintf("%x", md5.Sum(b))] = v.ServiceDiscoveryConfig
150162
}
151-
return rn.sdManager.ApplyConfig(
152-
map[string]sd_config.ServiceDiscoveryConfig{"ruler": amConfigs[0].ServiceDiscoveryConfig},
153-
)
163+
return rn.sdManager.ApplyConfig(sdCfgs)
154164
}
155165

156166
func (rn *rulerNotifier) stop() {

pkg/ruler/ruler_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,13 @@ func TestNotifierSendsUserIDHeader(t *testing.T) {
4848
if err != nil {
4949
t.Fatal(err)
5050
}
51-
defer n.Stop()
51+
for _, not := range r.notifiers {
52+
defer not.stop()
53+
}
5254
// Loop until notifier discovery syncs up
5355
for len(n.Alertmanagers()) == 0 {
5456
time.Sleep(10 * time.Millisecond)
5557
}
56-
5758
n.Send(&notifier.Alert{
5859
Labels: labels.Labels{labels.Label{Name: "alertname", Value: "testalert"}},
5960
})

0 commit comments

Comments
 (0)