From 5ba164d92b0f181039e589cbf2ccd6fe4528b63f Mon Sep 17 00:00:00 2001 From: Yuri Tseretyan Date: Wed, 26 Jul 2023 11:42:04 -0400 Subject: [PATCH] Alerting: Exclude expression refIDs from NoData state (#72219) --- pkg/services/ngalert/eval/eval.go | 4 +--- pkg/services/ngalert/eval/eval_test.go | 12 ++++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/pkg/services/ngalert/eval/eval.go b/pkg/services/ngalert/eval/eval.go index 71a0aee28cd..fd0e1ea6d91 100644 --- a/pkg/services/ngalert/eval/eval.go +++ b/pkg/services/ngalert/eval/eval.go @@ -324,8 +324,6 @@ func queryDataResponseToExecutionResults(c models.Condition, execResp *backend.Q for _, next := range c.Data { datasourceUIDsForRefIDs[next.RefID] = next.DatasourceUID } - // datasourceExprUID is a special DatasourceUID for expressions - datasourceExprUID := strconv.FormatInt(expr.DatasourceID, 10) result := ExecutionResults{Results: make(map[string]data.Frames)} for refID, res := range execResp.Responses { @@ -347,7 +345,7 @@ func queryDataResponseToExecutionResults(c models.Condition, execResp *backend.Q hasNoFrames := len(res.Frames) == 0 hasNoFields := len(res.Frames) == 1 && len(res.Frames[0].Fields) == 0 if hasNoFrames || hasNoFields { - if s, ok := datasourceUIDsForRefIDs[refID]; ok && s != datasourceExprUID { + if s, ok := datasourceUIDsForRefIDs[refID]; ok && expr.NodeTypeFromDatasourceUID(s) == expr.TypeDatasourceNode { // TODO perhaps extract datasource UID from ML expression too. result.NoData[refID] = s } } diff --git a/pkg/services/ngalert/eval/eval_test.go b/pkg/services/ngalert/eval/eval_test.go index 8db9eacded9..ae05282c6f5 100644 --- a/pkg/services/ngalert/eval/eval_test.go +++ b/pkg/services/ngalert/eval/eval_test.go @@ -562,11 +562,23 @@ func TestEvaluate(t *testing.T) { Data: []models.AlertQuery{{ RefID: "A", DatasourceUID: "test", + }, { + RefID: "B", + DatasourceUID: expr.DatasourceUID, + }, { + RefID: "C", + DatasourceUID: expr.OldDatasourceUID, + }, { + RefID: "D", + DatasourceUID: expr.MLDatasourceUID, }}, }, resp: backend.QueryDataResponse{ Responses: backend.Responses{ "A": {Frames: nil}, + "B": {Frames: []*data.Frame{{Fields: nil}}}, + "C": {Frames: nil}, + "D": {Frames: []*data.Frame{{Fields: nil}}}, }, }, expected: Results{{