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 {
return &backend.QueryDataResponse{}, err
}
nameFields(queryRes, target)
nameFrames(queryRes, target)
trimDatapoints(queryRes, target)
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 {
frame := data.NewFrame("",
data.NewField("time", nil, timeData),
data.NewField("value", tags, values))
data.NewField(data.TimeSeriesTimeFieldName, nil, timeData),
data.NewField(data.TimeSeriesValueFieldName, tags, values))
frame.Meta = &data.FrameMeta{
Type: data.FrameTypeTimeSeriesMulti,
}
@ -777,7 +777,7 @@ func getSortedLabelValues(labels data.Labels) []string {
return values
}
func nameFields(queryResult backend.DataResponse, target *Query) {
func nameFrames(queryResult backend.DataResponse, target *Query) {
set := make(map[string]struct{})
frames := queryResult.Frames
for _, v := range frames {
@ -796,9 +796,7 @@ func nameFields(queryResult backend.DataResponse, target *Query) {
// another is "number"
valueField := frame.Fields[1]
fieldName := getFieldName(*valueField, target, metricTypeCount)
if fieldName != "" {
valueField.SetConfig(&data.FieldConfig{DisplayNameFromDS: fieldName})
}
frame.Name = 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) {
getField := func() *data.Field {
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)
require.Equal(t, expected, frame.Name)
}
func TestRefIdMatching(t *testing.T) {

View File

@ -59,11 +59,11 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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) {
@ -108,20 +108,20 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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) {
@ -171,19 +171,19 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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) {
@ -240,35 +240,35 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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) {
@ -312,19 +312,19 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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) {
@ -393,51 +393,51 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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) {
@ -496,27 +496,27 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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) {
@ -598,19 +598,19 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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) {
@ -666,19 +666,19 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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) {
@ -734,19 +734,19 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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) {
@ -945,27 +945,27 @@ func TestResponseParser(t *testing.T) {
frame := dataframes[0]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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]
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[1].Name, "value")
require.Equal(t, frame.Fields[1].Name, data.TimeSeriesValueFieldName)
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) {
@ -1472,7 +1472,7 @@ func TestResponseParser(t *testing.T) {
assert.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].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)
assert.Equal(t, 1609459200000., v)
v, _ = frame.FloatAt(1, 0)
@ -1489,7 +1489,7 @@ func TestResponseParser(t *testing.T) {
assert.Len(t, frame.Fields, 2)
require.Equal(t, frame.Fields[0].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)
assert.Equal(t, 1609459200000., v)
v, _ = frame.FloatAt(1, 0)

View File

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

View File

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

View File

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

View File

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

View File

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