Elasticsearch: Fix where name of frame is set (#64233)

* Elasticsearch: Use displayName field for naming

* Change solution to frame.Name to be backward compatible

* Fix snapshot tests

* Use Time and Value for time and value fields

* Use variables from grafana-plugin-sdk-go for name
This commit is contained in:
Ivana Huckova 2023-03-08 13:32:01 +01:00 committed by GitHub
parent 1cb39b3523
commit aa123e0d50
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 158 additions and 195 deletions

View File

@ -82,7 +82,7 @@ func parseResponse(responses []*es.SearchResponse, targets []*Query, configuredF
if err != nil { if err != nil {
return &backend.QueryDataResponse{}, err return &backend.QueryDataResponse{}, err
} }
nameFields(queryRes, target) nameFrames(queryRes, target)
trimDatapoints(queryRes, target) trimDatapoints(queryRes, target)
result.Responses[target.RefID] = queryRes result.Responses[target.RefID] = queryRes
@ -381,8 +381,8 @@ func processBuckets(aggs map[string]interface{}, target *Query,
func newTimeSeriesFrame(timeData []time.Time, tags map[string]string, values []*float64) *data.Frame { func newTimeSeriesFrame(timeData []time.Time, tags map[string]string, values []*float64) *data.Frame {
frame := data.NewFrame("", frame := data.NewFrame("",
data.NewField("time", nil, timeData), data.NewField(data.TimeSeriesTimeFieldName, nil, timeData),
data.NewField("value", tags, values)) data.NewField(data.TimeSeriesValueFieldName, tags, values))
frame.Meta = &data.FrameMeta{ frame.Meta = &data.FrameMeta{
Type: data.FrameTypeTimeSeriesMulti, Type: data.FrameTypeTimeSeriesMulti,
} }
@ -777,7 +777,7 @@ func getSortedLabelValues(labels data.Labels) []string {
return values return values
} }
func nameFields(queryResult backend.DataResponse, target *Query) { func nameFrames(queryResult backend.DataResponse, target *Query) {
set := make(map[string]struct{}) set := make(map[string]struct{})
frames := queryResult.Frames frames := queryResult.Frames
for _, v := range frames { for _, v := range frames {
@ -796,9 +796,7 @@ func nameFields(queryResult backend.DataResponse, target *Query) {
// another is "number" // another is "number"
valueField := frame.Fields[1] valueField := frame.Fields[1]
fieldName := getFieldName(*valueField, target, metricTypeCount) fieldName := getFieldName(*valueField, target, metricTypeCount)
if fieldName != "" { frame.Name = fieldName
valueField.SetConfig(&data.FieldConfig{DisplayNameFromDS: fieldName})
}
} }
} }
} }

View File

@ -61,18 +61,7 @@ func requireFloatAt(t *testing.T, expected float64, field *data.Field, index int
} }
func requireTimeSeriesName(t *testing.T, expected string, frame *data.Frame) { func requireTimeSeriesName(t *testing.T, expected string, frame *data.Frame) {
getField := func() *data.Field { require.Equal(t, expected, frame.Name)
for _, field := range frame.Fields {
if field.Type() != data.FieldTypeTime {
return field
}
}
return nil
}
field := getField()
require.NotNil(t, expected, field.Config)
require.Equal(t, expected, field.Config.DisplayNameFromDS)
} }
func TestRefIdMatching(t *testing.T) { func TestRefIdMatching(t *testing.T) {

View File

@ -59,11 +59,11 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0] frame := dataframes[0]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "Count") assert.Equal(t, frame.Name, "Count")
}) })
t.Run("Simple query count & avg aggregation", func(t *testing.T) { t.Run("Simple query count & avg aggregation", func(t *testing.T) {
@ -108,20 +108,20 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0] frame := dataframes[0]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "Count") assert.Equal(t, frame.Name, "Count")
frame = dataframes[1] frame = dataframes[1]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "Average value") assert.Equal(t, frame.Name, "Average value")
}) })
t.Run("Single group by query one metric", func(t *testing.T) { t.Run("Single group by query one metric", func(t *testing.T) {
@ -171,19 +171,19 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0] frame := dataframes[0]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "server1") assert.Equal(t, frame.Name, "server1")
frame = dataframes[1] frame = dataframes[1]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "server2") assert.Equal(t, frame.Name, "server2")
}) })
t.Run("Single group by query two metrics", func(t *testing.T) { t.Run("Single group by query two metrics", func(t *testing.T) {
@ -240,35 +240,35 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0] frame := dataframes[0]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "server1 Count") assert.Equal(t, frame.Name, "server1 Count")
frame = dataframes[1] frame = dataframes[1]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "server1 Average @value") assert.Equal(t, frame.Name, "server1 Average @value")
frame = dataframes[2] frame = dataframes[2]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "server2 Count") assert.Equal(t, frame.Name, "server2 Count")
frame = dataframes[3] frame = dataframes[3]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "server2 Average @value") assert.Equal(t, frame.Name, "server2 Average @value")
}) })
t.Run("With percentiles", func(t *testing.T) { t.Run("With percentiles", func(t *testing.T) {
@ -312,19 +312,19 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0] frame := dataframes[0]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "p75") assert.Equal(t, frame.Name, "p75")
frame = dataframes[1] frame = dataframes[1]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "p90") assert.Equal(t, frame.Name, "p90")
}) })
t.Run("With extended stats", func(t *testing.T) { t.Run("With extended stats", func(t *testing.T) {
@ -393,51 +393,51 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0] frame := dataframes[0]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 1) require.Equal(t, frame.Fields[0].Len(), 1)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 1) require.Equal(t, frame.Fields[1].Len(), 1)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "server1 Max") assert.Equal(t, frame.Name, "server1 Max")
frame = dataframes[1] frame = dataframes[1]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 1) require.Equal(t, frame.Fields[0].Len(), 1)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 1) require.Equal(t, frame.Fields[1].Len(), 1)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "server1 Std Dev Lower") assert.Equal(t, frame.Name, "server1 Std Dev Lower")
frame = dataframes[2] frame = dataframes[2]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 1) require.Equal(t, frame.Fields[0].Len(), 1)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 1) require.Equal(t, frame.Fields[1].Len(), 1)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "server1 Std Dev Upper") assert.Equal(t, frame.Name, "server1 Std Dev Upper")
frame = dataframes[3] frame = dataframes[3]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 1) require.Equal(t, frame.Fields[0].Len(), 1)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 1) require.Equal(t, frame.Fields[1].Len(), 1)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "server2 Max") assert.Equal(t, frame.Name, "server2 Max")
frame = dataframes[4] frame = dataframes[4]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 1) require.Equal(t, frame.Fields[0].Len(), 1)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 1) require.Equal(t, frame.Fields[1].Len(), 1)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "server2 Std Dev Lower") assert.Equal(t, frame.Name, "server2 Std Dev Lower")
frame = dataframes[5] frame = dataframes[5]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 1) require.Equal(t, frame.Fields[0].Len(), 1)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 1) require.Equal(t, frame.Fields[1].Len(), 1)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "server2 Std Dev Upper") assert.Equal(t, frame.Name, "server2 Std Dev Upper")
}) })
t.Run("Single group by with alias pattern", func(t *testing.T) { t.Run("Single group by with alias pattern", func(t *testing.T) {
@ -496,27 +496,27 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0] frame := dataframes[0]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "server1 Count and {{not_exist}} server1") assert.Equal(t, frame.Name, "server1 Count and {{not_exist}} server1")
frame = dataframes[1] frame = dataframes[1]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "server2 Count and {{not_exist}} server2") assert.Equal(t, frame.Name, "server2 Count and {{not_exist}} server2")
frame = dataframes[2] frame = dataframes[2]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "0 Count and {{not_exist}} 0") assert.Equal(t, frame.Name, "0 Count and {{not_exist}} 0")
}) })
t.Run("Histogram response", func(t *testing.T) { t.Run("Histogram response", func(t *testing.T) {
@ -598,19 +598,19 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0] frame := dataframes[0]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "@metric:cpu") assert.Equal(t, frame.Name, "@metric:cpu")
frame = dataframes[1] frame = dataframes[1]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "@metric:logins.count") assert.Equal(t, frame.Name, "@metric:logins.count")
}) })
t.Run("With drop first and last aggregation (numeric)", func(t *testing.T) { t.Run("With drop first and last aggregation (numeric)", func(t *testing.T) {
@ -666,19 +666,19 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0] frame := dataframes[0]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 1) require.Equal(t, frame.Fields[0].Len(), 1)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 1) require.Equal(t, frame.Fields[1].Len(), 1)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "Average") assert.Equal(t, frame.Name, "Average")
frame = dataframes[1] frame = dataframes[1]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 1) require.Equal(t, frame.Fields[0].Len(), 1)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 1) require.Equal(t, frame.Fields[1].Len(), 1)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "Count") assert.Equal(t, frame.Name, "Count")
}) })
t.Run("With drop first and last aggregation (string)", func(t *testing.T) { t.Run("With drop first and last aggregation (string)", func(t *testing.T) {
@ -734,19 +734,19 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0] frame := dataframes[0]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 1) require.Equal(t, frame.Fields[0].Len(), 1)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 1) require.Equal(t, frame.Fields[1].Len(), 1)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "Average") assert.Equal(t, frame.Name, "Average")
frame = dataframes[1] frame = dataframes[1]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 1) require.Equal(t, frame.Fields[0].Len(), 1)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 1) require.Equal(t, frame.Fields[1].Len(), 1)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "Count") assert.Equal(t, frame.Name, "Count")
}) })
t.Run("Larger trimEdges value", func(t *testing.T) { t.Run("Larger trimEdges value", func(t *testing.T) {
@ -945,27 +945,27 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0] frame := dataframes[0]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "Sum @value") assert.Equal(t, frame.Name, "Sum @value")
frame = dataframes[1] frame = dataframes[1]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "Max @value") assert.Equal(t, frame.Name, "Max @value")
frame = dataframes[2] frame = dataframes[2]
require.Len(t, frame.Fields, 2) require.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Name, "time") require.Equal(t, frame.Fields[0].Name, data.TimeSeriesTimeFieldName)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Name, "value") require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "Sum @value * Max @value") assert.Equal(t, frame.Name, "Sum @value * Max @value")
}) })
t.Run("Terms with two bucket_script", func(t *testing.T) { t.Run("Terms with two bucket_script", func(t *testing.T) {
@ -1472,7 +1472,7 @@ func TestResponseParser(t *testing.T) {
assert.Len(t, frame.Fields, 2) assert.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "Top Metrics @value") assert.Equal(t, frame.Name, "Top Metrics @value")
v, _ := frame.FloatAt(0, 0) v, _ := frame.FloatAt(0, 0)
assert.Equal(t, 1609459200000., v) assert.Equal(t, 1609459200000., v)
v, _ = frame.FloatAt(1, 0) v, _ = frame.FloatAt(1, 0)
@ -1489,7 +1489,7 @@ func TestResponseParser(t *testing.T) {
assert.Len(t, frame.Fields, 2) assert.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].Len(), 2) require.Equal(t, frame.Fields[0].Len(), 2)
require.Equal(t, frame.Fields[1].Len(), 2) require.Equal(t, frame.Fields[1].Len(), 2)
assert.Equal(t, frame.Fields[1].Config.DisplayNameFromDS, "Top Metrics @anotherValue") assert.Equal(t, frame.Name, "Top Metrics @anotherValue")
v, _ = frame.FloatAt(0, 0) v, _ = frame.FloatAt(0, 0)
assert.Equal(t, 1609459200000., v) assert.Equal(t, 1609459200000., v)
v, _ = frame.FloatAt(1, 0) v, _ = frame.FloatAt(1, 0)

View File

@ -7,10 +7,10 @@
// 0 // 0
// ] // ]
// } // }
// Name: // Name: Count
// Dimensions: 2 Fields by 3 Rows // Dimensions: 2 Fields by 3 Rows
// +-------------------------------+------------------+ // +-------------------------------+------------------+
// | Name: time | Name: value | // | Name: Time | Name: Value |
// | Labels: | Labels: | // | Labels: | Labels: |
// | Type: []time.Time | Type: []*float64 | // | Type: []time.Time | Type: []*float64 |
// +-------------------------------+------------------+ // +-------------------------------+------------------+
@ -26,6 +26,7 @@
"frames": [ "frames": [
{ {
"schema": { "schema": {
"name": "Count",
"meta": { "meta": {
"type": "timeseries-multi", "type": "timeseries-multi",
"typeVersion": [ "typeVersion": [
@ -35,23 +36,20 @@
}, },
"fields": [ "fields": [
{ {
"name": "time", "name": "Time",
"type": "time", "type": "time",
"typeInfo": { "typeInfo": {
"frame": "time.Time" "frame": "time.Time"
} }
}, },
{ {
"name": "value", "name": "Value",
"type": "number", "type": "number",
"typeInfo": { "typeInfo": {
"frame": "float64", "frame": "float64",
"nullable": true "nullable": true
}, },
"labels": {}, "labels": {}
"config": {
"displayNameFromDS": "Count"
}
} }
] ]
}, },

View File

@ -7,10 +7,10 @@
// 0 // 0
// ] // ]
// } // }
// Name: // Name: val3 Max float
// Dimensions: 2 Fields by 3 Rows // Dimensions: 2 Fields by 3 Rows
// +-------------------------------+--------------------+ // +-------------------------------+--------------------+
// | Name: time | Name: value | // | Name: Time | Name: Value |
// | Labels: | Labels: label=val3 | // | Labels: | Labels: label=val3 |
// | Type: []time.Time | Type: []*float64 | // | Type: []time.Time | Type: []*float64 |
// +-------------------------------+--------------------+ // +-------------------------------+--------------------+
@ -28,10 +28,10 @@
// 0 // 0
// ] // ]
// } // }
// Name: // Name: val3 Min float
// Dimensions: 2 Fields by 3 Rows // Dimensions: 2 Fields by 3 Rows
// +-------------------------------+--------------------+ // +-------------------------------+--------------------+
// | Name: time | Name: value | // | Name: Time | Name: Value |
// | Labels: | Labels: label=val3 | // | Labels: | Labels: label=val3 |
// | Type: []time.Time | Type: []*float64 | // | Type: []time.Time | Type: []*float64 |
// +-------------------------------+--------------------+ // +-------------------------------+--------------------+
@ -49,10 +49,10 @@
// 0 // 0
// ] // ]
// } // }
// Name: // Name: val2 Max float
// Dimensions: 2 Fields by 3 Rows // Dimensions: 2 Fields by 3 Rows
// +-------------------------------+--------------------+ // +-------------------------------+--------------------+
// | Name: time | Name: value | // | Name: Time | Name: Value |
// | Labels: | Labels: label=val2 | // | Labels: | Labels: label=val2 |
// | Type: []time.Time | Type: []*float64 | // | Type: []time.Time | Type: []*float64 |
// +-------------------------------+--------------------+ // +-------------------------------+--------------------+
@ -70,10 +70,10 @@
// 0 // 0
// ] // ]
// } // }
// Name: // Name: val2 Min float
// Dimensions: 2 Fields by 3 Rows // Dimensions: 2 Fields by 3 Rows
// +-------------------------------+--------------------+ // +-------------------------------+--------------------+
// | Name: time | Name: value | // | Name: Time | Name: Value |
// | Labels: | Labels: label=val2 | // | Labels: | Labels: label=val2 |
// | Type: []time.Time | Type: []*float64 | // | Type: []time.Time | Type: []*float64 |
// +-------------------------------+--------------------+ // +-------------------------------+--------------------+
@ -91,10 +91,10 @@
// 0 // 0
// ] // ]
// } // }
// Name: // Name: val1 Max float
// Dimensions: 2 Fields by 3 Rows // Dimensions: 2 Fields by 3 Rows
// +-------------------------------+--------------------+ // +-------------------------------+--------------------+
// | Name: time | Name: value | // | Name: Time | Name: Value |
// | Labels: | Labels: label=val1 | // | Labels: | Labels: label=val1 |
// | Type: []time.Time | Type: []*float64 | // | Type: []time.Time | Type: []*float64 |
// +-------------------------------+--------------------+ // +-------------------------------+--------------------+
@ -112,10 +112,10 @@
// 0 // 0
// ] // ]
// } // }
// Name: // Name: val1 Min float
// Dimensions: 2 Fields by 3 Rows // Dimensions: 2 Fields by 3 Rows
// +-------------------------------+--------------------+ // +-------------------------------+--------------------+
// | Name: time | Name: value | // | Name: Time | Name: Value |
// | Labels: | Labels: label=val1 | // | Labels: | Labels: label=val1 |
// | Type: []time.Time | Type: []*float64 | // | Type: []time.Time | Type: []*float64 |
// +-------------------------------+--------------------+ // +-------------------------------+--------------------+
@ -131,6 +131,7 @@
"frames": [ "frames": [
{ {
"schema": { "schema": {
"name": "val3 Max float",
"meta": { "meta": {
"type": "timeseries-multi", "type": "timeseries-multi",
"typeVersion": [ "typeVersion": [
@ -140,14 +141,14 @@
}, },
"fields": [ "fields": [
{ {
"name": "time", "name": "Time",
"type": "time", "type": "time",
"typeInfo": { "typeInfo": {
"frame": "time.Time" "frame": "time.Time"
} }
}, },
{ {
"name": "value", "name": "Value",
"type": "number", "type": "number",
"typeInfo": { "typeInfo": {
"frame": "float64", "frame": "float64",
@ -155,9 +156,6 @@
}, },
"labels": { "labels": {
"label": "val3" "label": "val3"
},
"config": {
"displayNameFromDS": "val3 Max float"
} }
} }
] ]
@ -179,6 +177,7 @@
}, },
{ {
"schema": { "schema": {
"name": "val3 Min float",
"meta": { "meta": {
"type": "timeseries-multi", "type": "timeseries-multi",
"typeVersion": [ "typeVersion": [
@ -188,14 +187,14 @@
}, },
"fields": [ "fields": [
{ {
"name": "time", "name": "Time",
"type": "time", "type": "time",
"typeInfo": { "typeInfo": {
"frame": "time.Time" "frame": "time.Time"
} }
}, },
{ {
"name": "value", "name": "Value",
"type": "number", "type": "number",
"typeInfo": { "typeInfo": {
"frame": "float64", "frame": "float64",
@ -203,9 +202,6 @@
}, },
"labels": { "labels": {
"label": "val3" "label": "val3"
},
"config": {
"displayNameFromDS": "val3 Min float"
} }
} }
] ]
@ -227,6 +223,7 @@
}, },
{ {
"schema": { "schema": {
"name": "val2 Max float",
"meta": { "meta": {
"type": "timeseries-multi", "type": "timeseries-multi",
"typeVersion": [ "typeVersion": [
@ -236,14 +233,14 @@
}, },
"fields": [ "fields": [
{ {
"name": "time", "name": "Time",
"type": "time", "type": "time",
"typeInfo": { "typeInfo": {
"frame": "time.Time" "frame": "time.Time"
} }
}, },
{ {
"name": "value", "name": "Value",
"type": "number", "type": "number",
"typeInfo": { "typeInfo": {
"frame": "float64", "frame": "float64",
@ -251,9 +248,6 @@
}, },
"labels": { "labels": {
"label": "val2" "label": "val2"
},
"config": {
"displayNameFromDS": "val2 Max float"
} }
} }
] ]
@ -275,6 +269,7 @@
}, },
{ {
"schema": { "schema": {
"name": "val2 Min float",
"meta": { "meta": {
"type": "timeseries-multi", "type": "timeseries-multi",
"typeVersion": [ "typeVersion": [
@ -284,14 +279,14 @@
}, },
"fields": [ "fields": [
{ {
"name": "time", "name": "Time",
"type": "time", "type": "time",
"typeInfo": { "typeInfo": {
"frame": "time.Time" "frame": "time.Time"
} }
}, },
{ {
"name": "value", "name": "Value",
"type": "number", "type": "number",
"typeInfo": { "typeInfo": {
"frame": "float64", "frame": "float64",
@ -299,9 +294,6 @@
}, },
"labels": { "labels": {
"label": "val2" "label": "val2"
},
"config": {
"displayNameFromDS": "val2 Min float"
} }
} }
] ]
@ -323,6 +315,7 @@
}, },
{ {
"schema": { "schema": {
"name": "val1 Max float",
"meta": { "meta": {
"type": "timeseries-multi", "type": "timeseries-multi",
"typeVersion": [ "typeVersion": [
@ -332,14 +325,14 @@
}, },
"fields": [ "fields": [
{ {
"name": "time", "name": "Time",
"type": "time", "type": "time",
"typeInfo": { "typeInfo": {
"frame": "time.Time" "frame": "time.Time"
} }
}, },
{ {
"name": "value", "name": "Value",
"type": "number", "type": "number",
"typeInfo": { "typeInfo": {
"frame": "float64", "frame": "float64",
@ -347,9 +340,6 @@
}, },
"labels": { "labels": {
"label": "val1" "label": "val1"
},
"config": {
"displayNameFromDS": "val1 Max float"
} }
} }
] ]
@ -371,6 +361,7 @@
}, },
{ {
"schema": { "schema": {
"name": "val1 Min float",
"meta": { "meta": {
"type": "timeseries-multi", "type": "timeseries-multi",
"typeVersion": [ "typeVersion": [
@ -380,14 +371,14 @@
}, },
"fields": [ "fields": [
{ {
"name": "time", "name": "Time",
"type": "time", "type": "time",
"typeInfo": { "typeInfo": {
"frame": "time.Time" "frame": "time.Time"
} }
}, },
{ {
"name": "value", "name": "Value",
"type": "number", "type": "number",
"typeInfo": { "typeInfo": {
"frame": "float64", "frame": "float64",
@ -395,9 +386,6 @@
}, },
"labels": { "labels": {
"label": "val1" "label": "val1"
},
"config": {
"displayNameFromDS": "val1 Min float"
} }
} }
] ]

View File

@ -7,10 +7,10 @@
// 0 // 0
// ] // ]
// } // }
// Name: // Name: Max float
// Dimensions: 2 Fields by 3 Rows // Dimensions: 2 Fields by 3 Rows
// +-------------------------------+-------------------+ // +-------------------------------+-------------------+
// | Name: time | Name: value | // | Name: Time | Name: Value |
// | Labels: | Labels: | // | Labels: | Labels: |
// | Type: []time.Time | Type: []*float64 | // | Type: []time.Time | Type: []*float64 |
// +-------------------------------+-------------------+ // +-------------------------------+-------------------+
@ -26,6 +26,7 @@
"frames": [ "frames": [
{ {
"schema": { "schema": {
"name": "Max float",
"meta": { "meta": {
"type": "timeseries-multi", "type": "timeseries-multi",
"typeVersion": [ "typeVersion": [
@ -35,23 +36,20 @@
}, },
"fields": [ "fields": [
{ {
"name": "time", "name": "Time",
"type": "time", "type": "time",
"typeInfo": { "typeInfo": {
"frame": "time.Time" "frame": "time.Time"
} }
}, },
{ {
"name": "value", "name": "Value",
"type": "number", "type": "number",
"typeInfo": { "typeInfo": {
"frame": "float64", "frame": "float64",
"nullable": true "nullable": true
}, },
"labels": {}, "labels": {}
"config": {
"displayNameFromDS": "Max float"
}
} }
] ]
}, },

View File

@ -7,10 +7,10 @@
// 0 // 0
// ] // ]
// } // }
// Name: // Name: Min float
// Dimensions: 2 Fields by 3 Rows // Dimensions: 2 Fields by 3 Rows
// +-------------------------------+---------------------+ // +-------------------------------+---------------------+
// | Name: time | Name: value | // | Name: Time | Name: Value |
// | Labels: | Labels: | // | Labels: | Labels: |
// | Type: []time.Time | Type: []*float64 | // | Type: []time.Time | Type: []*float64 |
// +-------------------------------+---------------------+ // +-------------------------------+---------------------+
@ -26,6 +26,7 @@
"frames": [ "frames": [
{ {
"schema": { "schema": {
"name": "Min float",
"meta": { "meta": {
"type": "timeseries-multi", "type": "timeseries-multi",
"typeVersion": [ "typeVersion": [
@ -35,23 +36,20 @@
}, },
"fields": [ "fields": [
{ {
"name": "time", "name": "Time",
"type": "time", "type": "time",
"typeInfo": { "typeInfo": {
"frame": "time.Time" "frame": "time.Time"
} }
}, },
{ {
"name": "value", "name": "Value",
"type": "number", "type": "number",
"typeInfo": { "typeInfo": {
"frame": "float64", "frame": "float64",
"nullable": true "nullable": true
}, },
"labels": {}, "labels": {}
"config": {
"displayNameFromDS": "Min float"
}
} }
] ]
}, },

View File

@ -7,10 +7,10 @@
// 0 // 0
// ] // ]
// } // }
// Name: // Name: val3
// Dimensions: 2 Fields by 4 Rows // Dimensions: 2 Fields by 4 Rows
// +-------------------------------+--------------------+ // +-------------------------------+--------------------+
// | Name: time | Name: value | // | Name: Time | Name: Value |
// | Labels: | Labels: label=val3 | // | Labels: | Labels: label=val3 |
// | Type: []time.Time | Type: []*float64 | // | Type: []time.Time | Type: []*float64 |
// +-------------------------------+--------------------+ // +-------------------------------+--------------------+
@ -29,10 +29,10 @@
// 0 // 0
// ] // ]
// } // }
// Name: // Name: val2
// Dimensions: 2 Fields by 4 Rows // Dimensions: 2 Fields by 4 Rows
// +-------------------------------+--------------------+ // +-------------------------------+--------------------+
// | Name: time | Name: value | // | Name: Time | Name: Value |
// | Labels: | Labels: label=val2 | // | Labels: | Labels: label=val2 |
// | Type: []time.Time | Type: []*float64 | // | Type: []time.Time | Type: []*float64 |
// +-------------------------------+--------------------+ // +-------------------------------+--------------------+
@ -51,10 +51,10 @@
// 0 // 0
// ] // ]
// } // }
// Name: // Name: val1
// Dimensions: 2 Fields by 4 Rows // Dimensions: 2 Fields by 4 Rows
// +-------------------------------+--------------------+ // +-------------------------------+--------------------+
// | Name: time | Name: value | // | Name: Time | Name: Value |
// | Labels: | Labels: label=val1 | // | Labels: | Labels: label=val1 |
// | Type: []time.Time | Type: []*float64 | // | Type: []time.Time | Type: []*float64 |
// +-------------------------------+--------------------+ // +-------------------------------+--------------------+
@ -71,6 +71,7 @@
"frames": [ "frames": [
{ {
"schema": { "schema": {
"name": "val3",
"meta": { "meta": {
"type": "timeseries-multi", "type": "timeseries-multi",
"typeVersion": [ "typeVersion": [
@ -80,14 +81,14 @@
}, },
"fields": [ "fields": [
{ {
"name": "time", "name": "Time",
"type": "time", "type": "time",
"typeInfo": { "typeInfo": {
"frame": "time.Time" "frame": "time.Time"
} }
}, },
{ {
"name": "value", "name": "Value",
"type": "number", "type": "number",
"typeInfo": { "typeInfo": {
"frame": "float64", "frame": "float64",
@ -95,9 +96,6 @@
}, },
"labels": { "labels": {
"label": "val3" "label": "val3"
},
"config": {
"displayNameFromDS": "val3"
} }
} }
] ]
@ -121,6 +119,7 @@
}, },
{ {
"schema": { "schema": {
"name": "val2",
"meta": { "meta": {
"type": "timeseries-multi", "type": "timeseries-multi",
"typeVersion": [ "typeVersion": [
@ -130,14 +129,14 @@
}, },
"fields": [ "fields": [
{ {
"name": "time", "name": "Time",
"type": "time", "type": "time",
"typeInfo": { "typeInfo": {
"frame": "time.Time" "frame": "time.Time"
} }
}, },
{ {
"name": "value", "name": "Value",
"type": "number", "type": "number",
"typeInfo": { "typeInfo": {
"frame": "float64", "frame": "float64",
@ -145,9 +144,6 @@
}, },
"labels": { "labels": {
"label": "val2" "label": "val2"
},
"config": {
"displayNameFromDS": "val2"
} }
} }
] ]
@ -171,6 +167,7 @@
}, },
{ {
"schema": { "schema": {
"name": "val1",
"meta": { "meta": {
"type": "timeseries-multi", "type": "timeseries-multi",
"typeVersion": [ "typeVersion": [
@ -180,14 +177,14 @@
}, },
"fields": [ "fields": [
{ {
"name": "time", "name": "Time",
"type": "time", "type": "time",
"typeInfo": { "typeInfo": {
"frame": "time.Time" "frame": "time.Time"
} }
}, },
{ {
"name": "value", "name": "Value",
"type": "number", "type": "number",
"typeInfo": { "typeInfo": {
"frame": "float64", "frame": "float64",
@ -195,9 +192,6 @@
}, },
"labels": { "labels": {
"label": "val1" "label": "val1"
},
"config": {
"displayNameFromDS": "val1"
} }
} }
] ]