Alerting: Fix ConditionsCmd No Data for "has no value" (#58634)

This commit fixes a bug where ConditionsCmd returns No Data even when
the condition checks for "has no value". It should return 1 with a nil
match.
This commit is contained in:
George Robinson 2022-11-18 09:28:21 +00:00 committed by GitHub
parent 9c98314e9f
commit b77c3946a5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 11 deletions

View File

@ -79,6 +79,12 @@ func (cmd *ConditionsCmd) Execute(_ context.Context, _ time.Time, vars mathexp.V
querySeriesSet := vars[c.InputRefID]
nilReducedCount := 0
firingCount := 0
if len(querySeriesSet.Values) == 0 {
// Append a NoData data frame so "has no value" still works
querySeriesSet.Values = append(querySeriesSet.Values, mathexp.NoData{}.New())
}
for _, val := range querySeriesSet.Values {
var reducedNum mathexp.Number
var name string
@ -103,10 +109,6 @@ func (cmd *ConditionsCmd) Execute(_ context.Context, _ time.Time, vars mathexp.V
// TODO handle error / no data signals
thisCondNoDataFound := reducedNum.GetFloat64Value() == nil
if thisCondNoDataFound {
nilReducedCount++
}
evalRes := c.Evaluator.Eval(reducedNum)
if evalRes {
@ -119,6 +121,8 @@ func (cmd *ConditionsCmd) Execute(_ context.Context, _ time.Time, vars mathexp.V
}
matches = append(matches, match)
firingCount++
} else if thisCondNoDataFound {
nilReducedCount++
}
}

View File

@ -203,9 +203,8 @@ func TestConditionsCmd(t *testing.T) {
},
},
expected: func() mathexp.Results {
v := newNumber(nil)
// This seems incorrect
v.SetMeta([]EvalMatch{{}, {Metric: "NoData"}})
v := newNumber(ptr.Float64(1))
v.SetMeta([]EvalMatch{{Value: nil}})
return newResults(v)
},
}, {
@ -226,9 +225,9 @@ func TestConditionsCmd(t *testing.T) {
},
},
expected: func() mathexp.Results {
v := newNumber(nil)
v := newNumber(ptr.Float64(1))
// This too seems incorrect, looks like we don't call the evaluator
v.SetMeta([]EvalMatch{{Metric: "NoData"}})
v.SetMeta([]EvalMatch{{Value: nil}})
return newResults(v)
},
}, {
@ -251,9 +250,9 @@ func TestConditionsCmd(t *testing.T) {
},
},
expected: func() mathexp.Results {
v := newNumber(nil)
v := newNumber(ptr.Float64(1))
// This seems incorrect
v.SetMeta([]EvalMatch{{}, {Metric: "NoData"}})
v.SetMeta([]EvalMatch{{Value: nil}})
return newResults(v)
},
}, {