diff --git a/rules/alerting_test.go b/rules/alerting_test.go index 3f3eda12a..5ef69a2ca 100644 --- a/rules/alerting_test.go +++ b/rules/alerting_test.go @@ -63,7 +63,7 @@ func TestAlertingRuleState(t *testing.T) { } for i, test := range tests { - rule := NewAlertingRule(test.name, nil, 0, nil, nil, nil, "", true, nil) + rule := NewAlertingRule(test.name, nil, 0, labels.EmptyLabels(), labels.EmptyLabels(), labels.EmptyLabels(), "", true, nil) rule.active = test.active got := rule.State() require.Equal(t, test.want, got, "test case %d unexpected AlertState, want:%d got:%d", i, test.want, got) @@ -91,7 +91,7 @@ func TestAlertingRuleLabelsUpdate(t *testing.T) { // If an alert is going back and forth between two label values it will never fire. // Instead, you should write two alerts with constant labels. labels.FromStrings("severity", "{{ if lt $value 80.0 }}critical{{ else }}warning{{ end }}"), - nil, nil, "", true, nil, + labels.EmptyLabels(), labels.EmptyLabels(), "", true, nil, ) results := []promql.Vector{ @@ -190,8 +190,8 @@ func TestAlertingRuleExternalLabelsInTemplate(t *testing.T) { expr, time.Minute, labels.FromStrings("templated_label", "There are {{ len $externalLabels }} external Labels, of which foo is {{ $externalLabels.foo }}."), - nil, - nil, + labels.EmptyLabels(), + labels.EmptyLabels(), "", true, log.NewNopLogger(), ) @@ -200,7 +200,7 @@ func TestAlertingRuleExternalLabelsInTemplate(t *testing.T) { expr, time.Minute, labels.FromStrings("templated_label", "There are {{ len $externalLabels }} external Labels, of which foo is {{ $externalLabels.foo }}."), - nil, + labels.EmptyLabels(), labels.FromStrings("foo", "bar", "dings", "bums"), "", true, log.NewNopLogger(), @@ -284,8 +284,8 @@ func TestAlertingRuleExternalURLInTemplate(t *testing.T) { expr, time.Minute, labels.FromStrings("templated_label", "The external URL is {{ $externalURL }}."), - nil, - nil, + labels.EmptyLabels(), + labels.EmptyLabels(), "", true, log.NewNopLogger(), ) @@ -294,8 +294,8 @@ func TestAlertingRuleExternalURLInTemplate(t *testing.T) { expr, time.Minute, labels.FromStrings("templated_label", "The external URL is {{ $externalURL }}."), - nil, - nil, + labels.EmptyLabels(), + labels.EmptyLabels(), "http://localhost:1234", true, log.NewNopLogger(), ) @@ -378,8 +378,8 @@ func TestAlertingRuleEmptyLabelFromTemplate(t *testing.T) { expr, time.Minute, labels.FromStrings("empty_label", ""), - nil, - nil, + labels.EmptyLabels(), + labels.EmptyLabels(), "", true, log.NewNopLogger(), ) @@ -440,7 +440,7 @@ instance: {{ $v.Labels.instance }}, value: {{ printf "%.0f" $v.Value }}; {{- end -}} {{- end -}} `), - nil, + labels.EmptyLabels(), "", true, log.NewNopLogger(), ) @@ -477,7 +477,7 @@ instance: {{ $v.Labels.instance }}, value: {{ printf "%.0f" $v.Value }}; func BenchmarkAlertingRuleAtomicField(b *testing.B) { b.ReportAllocs() - rule := NewAlertingRule("bench", nil, 0, nil, nil, nil, "", true, nil) + rule := NewAlertingRule("bench", nil, 0, labels.EmptyLabels(), labels.EmptyLabels(), labels.EmptyLabels(), "", true, nil) done := make(chan struct{}) go func() { for i := 0; i < b.N; i++ { @@ -516,8 +516,8 @@ func TestAlertingRuleDuplicate(t *testing.T) { expr, time.Minute, labels.FromStrings("test", "test"), - nil, - nil, + labels.EmptyLabels(), + labels.EmptyLabels(), "", true, log.NewNopLogger(), ) @@ -562,8 +562,8 @@ func TestAlertingRuleLimit(t *testing.T) { expr, time.Minute, labels.FromStrings("test", "test"), - nil, - nil, + labels.EmptyLabels(), + labels.EmptyLabels(), "", true, log.NewNopLogger(), ) @@ -634,13 +634,13 @@ func TestQueryForStateSeries(t *testing.T) { nil, time.Minute, labels.FromStrings("severity", "critical"), - nil, nil, "", true, nil, + labels.EmptyLabels(), labels.EmptyLabels(), "", true, nil, ) alert := &Alert{ State: 0, - Labels: nil, - Annotations: nil, + Labels: labels.EmptyLabels(), + Annotations: labels.EmptyLabels(), Value: 0, ActiveAt: time.Time{}, FiredAt: time.Time{}, diff --git a/rules/manager_test.go b/rules/manager_test.go index 3389ec741..f30df4891 100644 --- a/rules/manager_test.go +++ b/rules/manager_test.go @@ -64,7 +64,7 @@ func TestAlertingRule(t *testing.T) { expr, time.Minute, labels.FromStrings("severity", "{{\"c\"}}ritical"), - nil, nil, "", true, nil, + labels.EmptyLabels(), labels.EmptyLabels(), "", true, nil, ) result := promql.Vector{ { @@ -207,7 +207,7 @@ func TestForStateAddSamples(t *testing.T) { expr, time.Minute, labels.FromStrings("severity", "{{\"c\"}}ritical"), - nil, nil, "", true, nil, + labels.EmptyLabels(), labels.EmptyLabels(), "", true, nil, ) result := promql.Vector{ { @@ -381,7 +381,7 @@ func TestForStateRestore(t *testing.T) { expr, alertForDuration, labels.FromStrings("severity", "critical"), - nil, nil, "", true, nil, + labels.EmptyLabels(), labels.EmptyLabels(), "", true, nil, ) group := NewGroup(GroupOptions{ @@ -447,7 +447,7 @@ func TestForStateRestore(t *testing.T) { expr, alertForDuration, labels.FromStrings("severity", "critical"), - nil, nil, "", false, nil, + labels.EmptyLabels(), labels.EmptyLabels(), "", false, nil, ) newGroup := NewGroup(GroupOptions{ Name: "default", @@ -611,36 +611,36 @@ func readSeriesSet(ss storage.SeriesSet) (map[string][]promql.Point, error) { func TestCopyState(t *testing.T) { oldGroup := &Group{ rules: []Rule{ - NewAlertingRule("alert", nil, 0, nil, nil, nil, "", true, nil), - NewRecordingRule("rule1", nil, nil), - NewRecordingRule("rule2", nil, nil), - NewRecordingRule("rule3", nil, labels.Labels{{Name: "l1", Value: "v1"}}), - NewRecordingRule("rule3", nil, labels.Labels{{Name: "l1", Value: "v2"}}), - NewRecordingRule("rule3", nil, labels.Labels{{Name: "l1", Value: "v3"}}), - NewAlertingRule("alert2", nil, 0, labels.Labels{{Name: "l2", Value: "v1"}}, nil, nil, "", true, nil), + NewAlertingRule("alert", nil, 0, labels.EmptyLabels(), labels.EmptyLabels(), labels.EmptyLabels(), "", true, nil), + NewRecordingRule("rule1", nil, labels.EmptyLabels()), + NewRecordingRule("rule2", nil, labels.EmptyLabels()), + NewRecordingRule("rule3", nil, labels.FromStrings("l1", "v1")), + NewRecordingRule("rule3", nil, labels.FromStrings("l1", "v2")), + NewRecordingRule("rule3", nil, labels.FromStrings("l1", "v3")), + NewAlertingRule("alert2", nil, 0, labels.FromStrings("l2", "v1"), labels.EmptyLabels(), labels.EmptyLabels(), "", true, nil), }, seriesInPreviousEval: []map[string]labels.Labels{ {}, {}, {}, - {"r3a": labels.Labels{{Name: "l1", Value: "v1"}}}, - {"r3b": labels.Labels{{Name: "l1", Value: "v2"}}}, - {"r3c": labels.Labels{{Name: "l1", Value: "v3"}}}, - {"a2": labels.Labels{{Name: "l2", Value: "v1"}}}, + {"r3a": labels.FromStrings("l1", "v1")}, + {"r3b": labels.FromStrings("l1", "v2")}, + {"r3c": labels.FromStrings("l1", "v3")}, + {"a2": labels.FromStrings("l2", "v1")}, }, evaluationTime: time.Second, } oldGroup.rules[0].(*AlertingRule).active[42] = nil newGroup := &Group{ rules: []Rule{ - NewRecordingRule("rule3", nil, labels.Labels{{Name: "l1", Value: "v0"}}), - NewRecordingRule("rule3", nil, labels.Labels{{Name: "l1", Value: "v1"}}), - NewRecordingRule("rule3", nil, labels.Labels{{Name: "l1", Value: "v2"}}), - NewAlertingRule("alert", nil, 0, nil, nil, nil, "", true, nil), - NewRecordingRule("rule1", nil, nil), - NewAlertingRule("alert2", nil, 0, labels.Labels{{Name: "l2", Value: "v0"}}, nil, nil, "", true, nil), - NewAlertingRule("alert2", nil, 0, labels.Labels{{Name: "l2", Value: "v1"}}, nil, nil, "", true, nil), - NewRecordingRule("rule4", nil, nil), + NewRecordingRule("rule3", nil, labels.FromStrings("l1", "v0")), + NewRecordingRule("rule3", nil, labels.FromStrings("l1", "v1")), + NewRecordingRule("rule3", nil, labels.FromStrings("l1", "v2")), + NewAlertingRule("alert", nil, 0, labels.EmptyLabels(), labels.EmptyLabels(), labels.EmptyLabels(), "", true, nil), + NewRecordingRule("rule1", nil, labels.EmptyLabels()), + NewAlertingRule("alert2", nil, 0, labels.FromStrings("l2", "v0"), labels.EmptyLabels(), labels.EmptyLabels(), "", true, nil), + NewAlertingRule("alert2", nil, 0, labels.FromStrings("l2", "v1"), labels.EmptyLabels(), labels.EmptyLabels(), "", true, nil), + NewRecordingRule("rule4", nil, labels.EmptyLabels()), }, seriesInPreviousEval: make([]map[string]labels.Labels, 8), } @@ -648,19 +648,19 @@ func TestCopyState(t *testing.T) { want := []map[string]labels.Labels{ nil, - {"r3a": labels.Labels{{Name: "l1", Value: "v1"}}}, - {"r3b": labels.Labels{{Name: "l1", Value: "v2"}}}, + {"r3a": labels.FromStrings("l1", "v1")}, + {"r3b": labels.FromStrings("l1", "v2")}, {}, {}, nil, - {"a2": labels.Labels{{Name: "l2", Value: "v1"}}}, + {"a2": labels.FromStrings("l2", "v1")}, nil, } require.Equal(t, want, newGroup.seriesInPreviousEval) require.Equal(t, oldGroup.rules[0], newGroup.rules[3]) require.Equal(t, oldGroup.evaluationTime, newGroup.evaluationTime) require.Equal(t, oldGroup.lastEvaluation, newGroup.lastEvaluation) - require.Equal(t, []labels.Labels{{{Name: "l1", Value: "v3"}}}, newGroup.staleSeries) + require.Equal(t, []labels.Labels{labels.FromStrings("l1", "v3")}, newGroup.staleSeries) } func TestDeletedRuleMarkedStale(t *testing.T) { @@ -668,10 +668,10 @@ func TestDeletedRuleMarkedStale(t *testing.T) { defer st.Close() oldGroup := &Group{ rules: []Rule{ - NewRecordingRule("rule1", nil, labels.Labels{{Name: "l1", Value: "v1"}}), + NewRecordingRule("rule1", nil, labels.FromStrings("l1", "v1")), }, seriesInPreviousEval: []map[string]labels.Labels{ - {"r1": labels.Labels{{Name: "l1", Value: "v1"}}}, + {"r1": labels.FromStrings("l1", "v1")}, }, } newGroup := &Group{ @@ -727,7 +727,7 @@ func TestUpdate(t *testing.T) { ruleManager.start() defer ruleManager.Stop() - err := ruleManager.Update(10*time.Second, files, nil, "", nil) + err := ruleManager.Update(10*time.Second, files, labels.EmptyLabels(), "", nil) require.NoError(t, err) require.Greater(t, len(ruleManager.groups), 0, "expected non-empty rule groups") ogs := map[string]*Group{} @@ -738,7 +738,7 @@ func TestUpdate(t *testing.T) { ogs[h] = g } - err = ruleManager.Update(10*time.Second, files, nil, "", nil) + err = ruleManager.Update(10*time.Second, files, labels.EmptyLabels(), "", nil) require.NoError(t, err) for h, g := range ruleManager.groups { for _, actual := range g.seriesInPreviousEval { @@ -757,7 +757,7 @@ func TestUpdate(t *testing.T) { defer os.Remove(tmpFile.Name()) defer tmpFile.Close() - err = ruleManager.Update(10*time.Second, []string{tmpFile.Name()}, nil, "", nil) + err = ruleManager.Update(10*time.Second, []string{tmpFile.Name()}, labels.EmptyLabels(), "", nil) require.NoError(t, err) for h, g := range ruleManager.groups { @@ -835,7 +835,7 @@ func reloadAndValidate(rgs *rulefmt.RuleGroups, t *testing.T, tmpFile *os.File, tmpFile.Seek(0, 0) _, err = tmpFile.Write(bs) require.NoError(t, err) - err = ruleManager.Update(10*time.Second, []string{tmpFile.Name()}, nil, "", nil) + err = ruleManager.Update(10*time.Second, []string{tmpFile.Name()}, labels.EmptyLabels(), "", nil) require.NoError(t, err) for h, g := range ruleManager.groups { if ogs[h] == g { @@ -871,7 +871,7 @@ func TestNotify(t *testing.T) { expr, err := parser.ParseExpr("a > 1") require.NoError(t, err) - rule := NewAlertingRule("aTooHigh", expr, 0, labels.Labels{}, labels.Labels{}, nil, "", true, log.NewNopLogger()) + rule := NewAlertingRule("aTooHigh", expr, 0, labels.Labels{}, labels.Labels{}, labels.EmptyLabels(), "", true, log.NewNopLogger()) group := NewGroup(GroupOptions{ Name: "alert", Interval: time.Second, @@ -980,7 +980,7 @@ func TestMetricsUpdate(t *testing.T) { } for i, c := range cases { - err := ruleManager.Update(time.Second, c.files, nil, "", nil) + err := ruleManager.Update(time.Second, c.files, labels.EmptyLabels(), "", nil) require.NoError(t, err) time.Sleep(2 * time.Second) require.Equal(t, c.metrics, countMetrics(), "test %d: invalid count of metrics", i) @@ -1054,7 +1054,7 @@ func TestGroupStalenessOnRemoval(t *testing.T) { var totalStaleNaN int for i, c := range cases { - err := ruleManager.Update(time.Second, c.files, nil, "", nil) + err := ruleManager.Update(time.Second, c.files, labels.EmptyLabels(), "", nil) require.NoError(t, err) time.Sleep(3 * time.Second) totalStaleNaN += c.staleNaN @@ -1096,11 +1096,11 @@ func TestMetricsStalenessOnManagerShutdown(t *testing.T) { } }() - err := ruleManager.Update(2*time.Second, files, nil, "", nil) + err := ruleManager.Update(2*time.Second, files, labels.EmptyLabels(), "", nil) time.Sleep(4 * time.Second) require.NoError(t, err) start := time.Now() - err = ruleManager.Update(3*time.Second, files[:0], nil, "", nil) + err = ruleManager.Update(3*time.Second, files[:0], labels.EmptyLabels(), "", nil) require.NoError(t, err) ruleManager.Stop() stopped = true @@ -1143,8 +1143,8 @@ func TestGroupHasAlertingRules(t *testing.T) { group: &Group{ name: "HasAlertingRule", rules: []Rule{ - NewAlertingRule("alert", nil, 0, nil, nil, nil, "", true, nil), - NewRecordingRule("record", nil, nil), + NewAlertingRule("alert", nil, 0, labels.EmptyLabels(), labels.EmptyLabels(), labels.EmptyLabels(), "", true, nil), + NewRecordingRule("record", nil, labels.EmptyLabels()), }, }, want: true, @@ -1160,7 +1160,7 @@ func TestGroupHasAlertingRules(t *testing.T) { group: &Group{ name: "HasOnlyRecordingRule", rules: []Rule{ - NewRecordingRule("record", nil, nil), + NewRecordingRule("record", nil, labels.EmptyLabels()), }, }, want: false, @@ -1295,7 +1295,7 @@ func TestUpdateMissedEvalMetrics(t *testing.T) { vector: expr, holdDuration: 5 * time.Minute, labels: labels.FromStrings("severity", "critical"), - annotations: nil, + annotations: labels.EmptyLabels(), externalLabels: nil, externalURL: "", active: m,