From 3de091edf1a941217751c762f1e02c2156a8058c Mon Sep 17 00:00:00 2001 From: Will Browne Date: Tue, 8 Dec 2020 22:04:05 +0100 Subject: [PATCH] Alerting: Use correct time series name override from frame fields (#29693) * 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 --- 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 2a42e78cd47..80b82e54c84 100644 --- a/pkg/services/alerting/conditions/query_test.go +++ b/pkg/services/alerting/conditions/query_test.go @@ -306,6 +306,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) {