mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Alerting: Fix Classic Conditions $values variable (#64243)
This commit fixes a bug in the $values variable in notification templates when using Classic Conditions. Since Classic Conditions are not multi-dimensional, the values of each series that exceeded the condition should be available as a RefID and offset. For example, B0, B1, etc. However, this bug meant that instead just a single condition would be printed as B, not B0.
This commit is contained in:
parent
19d01dff91
commit
ed71012ced
@ -52,11 +52,11 @@ func (rs *ruleStates) getOrCreate(ctx context.Context, log log.Logger, alertRule
|
|||||||
ruleLabels, annotations := rs.expandRuleLabelsAndAnnotations(ctx, log, alertRule, result, extraLabels, externalURL)
|
ruleLabels, annotations := rs.expandRuleLabelsAndAnnotations(ctx, log, alertRule, result, extraLabels, externalURL)
|
||||||
|
|
||||||
values := make(map[string]float64)
|
values := make(map[string]float64)
|
||||||
for _, v := range result.Values {
|
for refID, v := range result.Values {
|
||||||
if v.Value != nil {
|
if v.Value != nil {
|
||||||
values[v.Var] = *v.Value
|
values[refID] = *v.Value
|
||||||
} else {
|
} else {
|
||||||
values[v.Var] = math.NaN()
|
values[refID] = math.NaN()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,6 +108,7 @@ func Test_getOrCreate(t *testing.T) {
|
|||||||
assert.Equal(t, expected, state.Labels["rule-"+key])
|
assert.Equal(t, expected, state.Labels["rule-"+key])
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("rule annotations should be able to be expanded with result and extra labels", func(t *testing.T) {
|
t.Run("rule annotations should be able to be expanded with result and extra labels", func(t *testing.T) {
|
||||||
result := eval.Result{
|
result := eval.Result{
|
||||||
Instance: models.GenerateAlertLabels(5, "result-"),
|
Instance: models.GenerateAlertLabels(5, "result-"),
|
||||||
@ -134,6 +135,34 @@ func Test_getOrCreate(t *testing.T) {
|
|||||||
assert.Equal(t, expected, state.Annotations["rule-"+key])
|
assert.Equal(t, expected, state.Annotations["rule-"+key])
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("expected Reduce and Math expression values", func(t *testing.T) {
|
||||||
|
result := eval.Result{
|
||||||
|
Instance: models.GenerateAlertLabels(5, "result-"),
|
||||||
|
Values: map[string]eval.NumberValueCapture{
|
||||||
|
"A": eval.NumberValueCapture{Var: "A", Value: util.Pointer(1.0)},
|
||||||
|
"B": eval.NumberValueCapture{Var: "B", Value: util.Pointer(2.0)},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
rule := generateRule()
|
||||||
|
|
||||||
|
state := c.getOrCreate(context.Background(), l, rule, result, nil, url)
|
||||||
|
assert.Equal(t, map[string]float64{"A": 1, "B": 2}, state.Values)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("expected Classic Condition values", func(t *testing.T) {
|
||||||
|
result := eval.Result{
|
||||||
|
Instance: models.GenerateAlertLabels(5, "result-"),
|
||||||
|
Values: map[string]eval.NumberValueCapture{
|
||||||
|
"B0": eval.NumberValueCapture{Var: "B", Value: util.Pointer(1.0)},
|
||||||
|
"B1": eval.NumberValueCapture{Var: "B", Value: util.Pointer(2.0)},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
rule := generateRule()
|
||||||
|
|
||||||
|
state := c.getOrCreate(context.Background(), l, rule, result, nil, url)
|
||||||
|
assert.Equal(t, map[string]float64{"B0": 1, "B1": 2}, state.Values)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_mergeLabels(t *testing.T) {
|
func Test_mergeLabels(t *testing.T) {
|
||||||
|
Loading…
Reference in New Issue
Block a user