From 3ed851151fa3ce55d4f9e1b8f368dedff7cdf461 Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Tue, 8 Dec 2020 22:22:15 +0100 Subject: [PATCH] Alerting: Use correct time series name override from frame fields (#29693) (#29698) * cater for empty labels and new DisplayNameFromDS field * simplify Co-authored-by: Arve Knudsen * increase priority for ds display name Co-authored-by: Arve Knudsen (cherry picked from commit 3de091edf1a941217751c762f1e02c2156a8058c) Co-authored-by: Will Browne --- pkg/services/alerting/conditions/query.go | 4 +- .../alerting/conditions/query_test.go | 47 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/pkg/services/alerting/conditions/query.go b/pkg/services/alerting/conditions/query.go index 7f6de2027cd..9bb266961b2 100644 --- a/pkg/services/alerting/conditions/query.go +++ b/pkg/services/alerting/conditions/query.go @@ -333,7 +333,9 @@ func FrameToSeriesSlice(frame *data.Frame) (tsdb.TimeSeriesSlice, error) { switch { case field.Config != nil && field.Config.DisplayName != "": ts.Name = field.Config.DisplayName - case field.Labels != nil: + case field.Config != nil && field.Config.DisplayNameFromDS != "": + ts.Name = field.Config.DisplayNameFromDS + case len(field.Labels) > 0: ts.Tags = field.Labels.Copy() // Tags are appended to the name so they are eventually included in EvalMatch's Metric property // for display in notifications. diff --git a/pkg/services/alerting/conditions/query_test.go b/pkg/services/alerting/conditions/query_test.go index 54765e7328d..4e04990616c 100644 --- a/pkg/services/alerting/conditions/query_test.go +++ b/pkg/services/alerting/conditions/query_test.go @@ -296,6 +296,53 @@ func TestFrameToSeriesSlice(t *testing.T) { }, Err: require.NoError, }, + { + name: "empty labels", + frame: data.NewFrame("", + data.NewField("Time", data.Labels{}, []time.Time{}), + data.NewField(`Values`, data.Labels{}, []float64{})), + + seriesSlice: tsdb.TimeSeriesSlice{ + &tsdb.TimeSeries{ + Name: "Values", + Points: tsdb.TimeSeriesPoints{}, + }, + }, + Err: require.NoError, + }, + { + name: "display name from data source", + frame: data.NewFrame("", + data.NewField("Time", data.Labels{}, []time.Time{}), + data.NewField(`Values`, data.Labels{}, []*int64{}).SetConfig(&data.FieldConfig{ + DisplayNameFromDS: "sloth", + })), + + seriesSlice: tsdb.TimeSeriesSlice{ + &tsdb.TimeSeries{ + Name: "sloth", + Points: tsdb.TimeSeriesPoints{}, + }, + }, + Err: require.NoError, + }, + { + name: "prefer display name over data source display name", + frame: data.NewFrame("", + data.NewField("Time", data.Labels{}, []time.Time{}), + data.NewField(`Values`, data.Labels{}, []*int64{}).SetConfig(&data.FieldConfig{ + DisplayName: "sloth #1", + DisplayNameFromDS: "sloth #2", + })), + + seriesSlice: tsdb.TimeSeriesSlice{ + &tsdb.TimeSeries{ + Name: "sloth #1", + Points: tsdb.TimeSeriesPoints{}, + }, + }, + Err: require.NoError, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {