InfluxDB: Flux: Improve handling of complex response-structures (#33823)
This commit is contained in:
@@ -83,7 +83,7 @@ func TestExecuteSimple(t *testing.T) {
|
||||
require.Len(t, dr.Frames, 1)
|
||||
require.Contains(t, dr.Frames[0].Name, "test")
|
||||
require.Len(t, dr.Frames[0].Fields[1].Labels, 2)
|
||||
require.Equal(t, "Time", dr.Frames[0].Fields[0].Name)
|
||||
require.Equal(t, "_time", dr.Frames[0].Fields[0].Name)
|
||||
|
||||
st, err := dr.Frames[0].StringTable(-1, -1)
|
||||
require.NoError(t, err)
|
||||
@@ -101,7 +101,7 @@ func TestExecuteMultiple(t *testing.T) {
|
||||
require.Len(t, dr.Frames, 3)
|
||||
require.Contains(t, dr.Frames[0].Name, "test")
|
||||
require.Len(t, dr.Frames[0].Fields[1].Labels, 2)
|
||||
require.Equal(t, "Time", dr.Frames[0].Fields[0].Name)
|
||||
require.Equal(t, "_time", dr.Frames[0].Fields[0].Name)
|
||||
|
||||
st, err := dr.Frames[0].StringTable(-1, -1)
|
||||
require.NoError(t, err)
|
||||
@@ -118,8 +118,8 @@ func TestExecuteGrouping(t *testing.T) {
|
||||
dr := verifyGoldenResponse(t, "grouping")
|
||||
require.Len(t, dr.Frames, 3)
|
||||
require.Contains(t, dr.Frames[0].Name, "system")
|
||||
require.Len(t, dr.Frames[0].Fields[1].Labels, 1)
|
||||
require.Equal(t, "Time", dr.Frames[0].Fields[0].Name)
|
||||
require.Len(t, dr.Frames[0].Fields[0].Labels, 1)
|
||||
require.Equal(t, "_time", dr.Frames[0].Fields[1].Name)
|
||||
|
||||
st, err := dr.Frames[0].StringTable(-1, -1)
|
||||
require.NoError(t, err)
|
||||
@@ -138,9 +138,9 @@ func TestAggregateGrouping(t *testing.T) {
|
||||
// `Name:
|
||||
// Dimensions: 2 Fields by 3 Rows
|
||||
// +-------------------------------+--------------------------+
|
||||
// | Name: Time | Name: |
|
||||
// | Name: _time | Name: _value |
|
||||
// | Labels: | Labels: host=hostname.ru |
|
||||
// | Type: []time.Time | Type: []*float64 |
|
||||
// | Type: []*time.Time | Type: []*float64 |
|
||||
// +-------------------------------+--------------------------+
|
||||
// | 2020-06-05 12:06:00 +0000 UTC | 8.291 |
|
||||
// | 2020-06-05 12:07:00 +0000 UTC | 0.534 |
|
||||
@@ -148,13 +148,13 @@ func TestAggregateGrouping(t *testing.T) {
|
||||
// +-------------------------------+--------------------------+
|
||||
// `
|
||||
|
||||
t1 := time.Date(2020, 6, 5, 12, 6, 0, 0, time.UTC)
|
||||
t2 := time.Date(2020, 6, 5, 12, 7, 0, 0, time.UTC)
|
||||
t3 := time.Date(2020, 6, 5, 12, 8, 0, 0, time.UTC)
|
||||
|
||||
expectedFrame := data.NewFrame("",
|
||||
data.NewField("Time", nil, []time.Time{
|
||||
time.Date(2020, 6, 5, 12, 6, 0, 0, time.UTC),
|
||||
time.Date(2020, 6, 5, 12, 7, 0, 0, time.UTC),
|
||||
time.Date(2020, 6, 5, 12, 8, 0, 0, time.UTC),
|
||||
}),
|
||||
data.NewField("", map[string]string{"host": "hostname.ru"}, []*float64{
|
||||
data.NewField("_time", nil, []*time.Time{&t1, &t2, &t3}),
|
||||
data.NewField("_value", map[string]string{"host": "hostname.ru"}, []*float64{
|
||||
pointer.Float64(8.291),
|
||||
pointer.Float64(0.534),
|
||||
pointer.Float64(0.667),
|
||||
@@ -174,20 +174,22 @@ func TestNonStandardTimeColumn(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
fmt.Println(str)
|
||||
|
||||
// Dimensions: 2 Fields by 1 Rows
|
||||
// +-----------------------------------------+------------------+
|
||||
// | Name: _start_water | Name: |
|
||||
// | Labels: | Labels: st=1 |
|
||||
// | Type: []time.Time | Type: []*float64 |
|
||||
// +-----------------------------------------+------------------+
|
||||
// | 2020-06-28 17:50:13.012584046 +0000 UTC | 156.304 |
|
||||
// +-----------------------------------------+------------------+
|
||||
// Dimensions: 3 Fields by 1 Rows
|
||||
// +-----------------------------------------+-----------------------------------------+------------------+
|
||||
// | Name: _start_water | Name: _stop_water | Name: _value |
|
||||
// | Labels: st=1 | Labels: st=1 | Labels: st=1 |
|
||||
// | Type: []*time.Time | Type: []*time.Time | Type: []*float64 |
|
||||
// +-----------------------------------------+-----------------------------------------+------------------+
|
||||
// | 2020-06-28 17:50:13.012584046 +0000 UTC | 2020-06-29 17:50:13.012584046 +0000 UTC | 156.304 |
|
||||
// +-----------------------------------------+-----------------------------------------+------------------+
|
||||
|
||||
t1 := time.Date(2020, 6, 28, 17, 50, 13, 12584046, time.UTC)
|
||||
t2 := time.Date(2020, 6, 29, 17, 50, 13, 12584046, time.UTC)
|
||||
|
||||
expectedFrame := data.NewFrame("",
|
||||
data.NewField("_start_water", nil, []time.Time{
|
||||
time.Date(2020, 6, 28, 17, 50, 13, 12584046, time.UTC),
|
||||
}),
|
||||
data.NewField("", map[string]string{"st": "1"}, []*float64{
|
||||
data.NewField("_start_water", map[string]string{"st": "1"}, []*time.Time{&t1}),
|
||||
data.NewField("_stop_water", map[string]string{"st": "1"}, []*time.Time{&t2}),
|
||||
data.NewField("_value", map[string]string{"st": "1"}, []*float64{
|
||||
pointer.Float64(156.304),
|
||||
}),
|
||||
)
|
||||
@@ -265,3 +267,35 @@ func TestMaxDataPointsExceededWithAggregate(t *testing.T) {
|
||||
require.EqualError(t, dr.Error, "A query returned too many datapoints and the results have been truncated at 21 points to prevent memory issues. At the current graph size, Grafana can only draw 2.")
|
||||
assertDataResponseDimensions(t, dr, 2, 21)
|
||||
}
|
||||
|
||||
func TestMultivalue(t *testing.T) {
|
||||
// we await a non-labeled _time column
|
||||
// and two value-columns named _value and _value2
|
||||
dr := verifyGoldenResponse(t, "multivalue")
|
||||
require.Len(t, dr.Frames, 4)
|
||||
frame := dr.Frames[0]
|
||||
require.Len(t, frame.Fields, 3)
|
||||
require.Equal(t, frame.Fields[0].Name, "_time")
|
||||
require.Equal(t, frame.Fields[0].Len(), 2)
|
||||
require.Len(t, frame.Fields[0].Labels, 0)
|
||||
require.Equal(t, frame.Fields[1].Name, "_value")
|
||||
require.Len(t, frame.Fields[1].Labels, 5)
|
||||
require.Equal(t, frame.Fields[2].Name, "_value2")
|
||||
require.Len(t, frame.Fields[2].Labels, 5)
|
||||
}
|
||||
|
||||
func TestMultiTime(t *testing.T) {
|
||||
// we await three columns, _time, _time2, _value
|
||||
// all have all labels
|
||||
dr := verifyGoldenResponse(t, "multitime")
|
||||
require.Len(t, dr.Frames, 4)
|
||||
frame := dr.Frames[0]
|
||||
require.Len(t, frame.Fields, 3)
|
||||
require.Equal(t, frame.Fields[0].Name, "_time")
|
||||
require.Equal(t, frame.Fields[0].Len(), 1)
|
||||
require.Len(t, frame.Fields[0].Labels, 5)
|
||||
require.Equal(t, frame.Fields[1].Name, "_time2")
|
||||
require.Len(t, frame.Fields[1].Labels, 5)
|
||||
require.Equal(t, frame.Fields[2].Name, "_value")
|
||||
require.Len(t, frame.Fields[2].Labels, 5)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user