From cfaca42e973fa86efb62f10ed01586fbd582953a Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Mon, 23 Nov 2020 13:19:52 -0800 Subject: [PATCH] InfluxDB: update flux library and support boolean label values (#29310) --- go.mod | 3 +- go.sum | 10 +- pkg/tsdb/influxdb/flux/builder.go | 7 +- pkg/tsdb/influxdb/flux/executor_test.go | 194 ++++++++---------- pkg/tsdb/influxdb/flux/testdata/boolean.csv | 9 + .../influxdb/flux/testdata/boolean.golden.txt | 58 ++++++ pkg/tsdb/influxdb/flux/testdata/multiple.csv | 6 - .../flux/testdata/multiple.golden.txt | 15 -- 8 files changed, 167 insertions(+), 135 deletions(-) create mode 100644 pkg/tsdb/influxdb/flux/testdata/boolean.csv create mode 100644 pkg/tsdb/influxdb/flux/testdata/boolean.golden.txt diff --git a/go.mod b/go.mod index 4dcdf5bd92e..ae98cc7700b 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,6 @@ require ( github.com/centrifugal/centrifuge v0.13.0 github.com/crewjam/saml v0.4.1 github.com/davecgh/go-spew v1.1.1 - github.com/deepmap/oapi-codegen v1.3.11 // indirect github.com/denisenkom/go-mssqldb v0.0.0-20200620013148-b91950f658ec github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51 // indirect github.com/facebookgo/inject v0.0.0-20180706035515-f23751cae28b @@ -50,7 +49,7 @@ require ( github.com/hashicorp/go-plugin v1.2.2 github.com/hashicorp/go-version v1.2.0 github.com/inconshreveable/log15 v0.0.0-20180818164646-67afb5ed74ec - github.com/influxdata/influxdb-client-go/v2 v2.0.1 + github.com/influxdata/influxdb-client-go/v2 v2.2.0 github.com/jmespath/go-jmespath v0.4.0 github.com/jonboulle/clockwork v0.2.1 // indirect github.com/jung-kurt/gofpdf v1.10.1 diff --git a/go.sum b/go.sum index 7b40770a436..c15d001c14e 100644 --- a/go.sum +++ b/go.sum @@ -260,9 +260,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dchest/uniuri v0.0.0-20160212164326-8902c56451e9/go.mod h1:GgB8SF9nRG+GqaDtLcwJZsQFhcogVCJ79j4EdT0c2V4= -github.com/deepmap/oapi-codegen v1.3.6/go.mod h1:aBozjEveG+33xPiP55Iw/XbVkhtZHEGLq3nxlX0+hfU= -github.com/deepmap/oapi-codegen v1.3.11 h1:Nd3tDQfqgquLmCzyRONHzs5SJEwPPoQcFZxT8MKt1Hs= -github.com/deepmap/oapi-codegen v1.3.11/go.mod h1:suMvK7+rKlx3+tpa8ByptmvoXbAV70wERKTOGH3hLp0= +github.com/deepmap/oapi-codegen v1.3.13 h1:9HKGCsdJqE4dnrQ8VerFS0/1ZOJPmAhN+g8xgp8y3K4= +github.com/deepmap/oapi-codegen v1.3.13/go.mod h1:WAmG5dWY8/PYHt4vKxlt90NsbHMAOCiteYKZMiIRfOo= github.com/denisenkom/go-mssqldb v0.0.0-20200620013148-b91950f658ec h1:NfhRXXFDPxcF5Cwo06DzeIaE7uuJtAUhsDwH3LNsjos= github.com/denisenkom/go-mssqldb v0.0.0-20200620013148-b91950f658ec/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= @@ -343,7 +342,6 @@ github.com/fsouza/fake-gcs-server v1.7.0/go.mod h1:5XIRs4YvwNbNoz+1JF8j6KLAyDh7R github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/gchaincl/sqlhooks v1.3.0 h1:yKPXxW9a5CjXaVf2HkQn6wn7TZARvbAOAelr3H8vK2Y= github.com/gchaincl/sqlhooks v1.3.0/go.mod h1:9BypXnereMT0+Ys8WGWHqzgkkOfHIhyeUCqXC24ra34= -github.com/getkin/kin-openapi v0.2.0/go.mod h1:V1z9xl9oF5Wt7v32ne4FmiF1alpS4dM6mNzoywPOXlk= github.com/getkin/kin-openapi v0.13.0/go.mod h1:WGRs2ZMM1Q8LR1QBEwUxC6RJEfaBcD0s+pcEVXFuAjw= github.com/getsentry/sentry-go v0.7.0 h1:MR2yfR4vFfv/2+iBuSnkdQwVg7N9cJzihZ6KJu7srwQ= github.com/getsentry/sentry-go v0.7.0/go.mod h1:pLFpD2Y5RHIKF9Bw3KH6/68DeN2K/XBJd8awjdPnUwg= @@ -716,8 +714,8 @@ github.com/influxdata/go-syslog/v3 v3.0.1-0.20200510134747-836dce2cf6da/go.mod h github.com/influxdata/influxdb v1.7.7/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= github.com/influxdata/influxdb v1.8.0/go.mod h1:SIzcnsjaHRFpmlxpJ4S3NT64qtEKYweNTUMb/vh0OMQ= github.com/influxdata/influxdb v1.8.1/go.mod h1:SIzcnsjaHRFpmlxpJ4S3NT64qtEKYweNTUMb/vh0OMQ= -github.com/influxdata/influxdb-client-go/v2 v2.0.1 h1:vRla3taM+zkziP1NUGfN6Y6zJ9ZSSMg0fs/JhCGyX1s= -github.com/influxdata/influxdb-client-go/v2 v2.0.1/go.mod h1:eyFPc0lhFnNSpyCDb0ZkrB3Hbtqvn1K1JZmjo2BXqeo= +github.com/influxdata/influxdb-client-go/v2 v2.2.0 h1:2R/le0s/MZpHtc+ijuXKe2c4KGN14M85mWtGlmg6vec= +github.com/influxdata/influxdb-client-go/v2 v2.2.0/go.mod h1:fa/d1lAdUHxuc1jedx30ZfNG573oQTQmUni3N6pcW+0= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/influxql v1.1.0/go.mod h1:KpVI7okXjK6PRi3Z5B+mtKZli+R1DnZgb3N+tzevNgo= github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= diff --git a/pkg/tsdb/influxdb/flux/builder.go b/pkg/tsdb/influxdb/flux/builder.go index 191ae25f2f3..f9358972ffc 100644 --- a/pkg/tsdb/influxdb/flux/builder.go +++ b/pkg/tsdb/influxdb/flux/builder.go @@ -209,9 +209,10 @@ func (fb *frameBuilder) Append(record *query.FluxRecord) error { // set the labels labels := make(map[string]string) for _, name := range fb.labels { - val, ok := record.ValueByKey(name).(string) - if ok { - labels[name] = val + val := record.ValueByKey(name) + str := fmt.Sprintf("%v", val) + if val != nil && str != "" { + labels[name] = str } } fb.active.Fields[1].Labels = labels diff --git a/pkg/tsdb/influxdb/flux/executor_test.go b/pkg/tsdb/influxdb/flux/executor_test.go index e053c6c3972..46f92bc3e3b 100644 --- a/pkg/tsdb/influxdb/flux/executor_test.go +++ b/pkg/tsdb/influxdb/flux/executor_test.go @@ -73,141 +73,129 @@ func verifyGoldenResponse(t *testing.T, name string) *backend.DataResponse { } func TestExecuteSimple(t *testing.T) { - t.Run("Simple Test", func(t *testing.T) { - dr := verifyGoldenResponse(t, "simple") - 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) + dr := verifyGoldenResponse(t, "simple") + 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) - st, err := dr.Frames[0].StringTable(-1, -1) - require.NoError(t, err) - fmt.Println(st) - fmt.Println("----------------------") - }) + st, err := dr.Frames[0].StringTable(-1, -1) + require.NoError(t, err) + fmt.Println(st) + fmt.Println("----------------------") } func TestExecuteSingle(t *testing.T) { - t.Run("Single value", func(t *testing.T) { - dr := verifyGoldenResponse(t, "single") - require.Len(t, dr.Frames, 1) - }) + dr := verifyGoldenResponse(t, "single") + require.Len(t, dr.Frames, 1) } func TestExecuteMultiple(t *testing.T) { - t.Run("Multiple Test", func(t *testing.T) { - dr := verifyGoldenResponse(t, "multiple") - require.Len(t, dr.Frames, 4) - 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) + dr := verifyGoldenResponse(t, "multiple") + 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) - st, err := dr.Frames[0].StringTable(-1, -1) - require.NoError(t, err) - fmt.Println(st) - fmt.Println("----------------------") - }) + st, err := dr.Frames[0].StringTable(-1, -1) + require.NoError(t, err) + fmt.Println(st) + fmt.Println("----------------------") } func TestExecuteGrouping(t *testing.T) { - t.Run("Grouping Test", func(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) + 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) - st, err := dr.Frames[0].StringTable(-1, -1) - require.NoError(t, err) - fmt.Println(st) - fmt.Println("----------------------") - }) + st, err := dr.Frames[0].StringTable(-1, -1) + require.NoError(t, err) + fmt.Println(st) + fmt.Println("----------------------") } func TestAggregateGrouping(t *testing.T) { - t.Run("Grouping Test", func(t *testing.T) { - dr := verifyGoldenResponse(t, "aggregate") - require.Len(t, dr.Frames, 1) + dr := verifyGoldenResponse(t, "aggregate") + require.Len(t, dr.Frames, 1) - str, err := dr.Frames[0].StringTable(-1, -1) - require.NoError(t, err) - fmt.Println(str) + str, err := dr.Frames[0].StringTable(-1, -1) + require.NoError(t, err) + fmt.Println(str) - // `Name: - // Dimensions: 2 Fields by 3 Rows - // +-------------------------------+--------------------------+ - // | Name: Time | Name: | - // | Labels: | Labels: host=hostname.ru | - // | 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 | - // | 2020-06-05 12:08:00 +0000 UTC | 0.667 | - // +-------------------------------+--------------------------+ - // ` + // `Name: + // Dimensions: 2 Fields by 3 Rows + // +-------------------------------+--------------------------+ + // | Name: Time | Name: | + // | Labels: | Labels: host=hostname.ru | + // | 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 | + // | 2020-06-05 12:08:00 +0000 UTC | 0.667 | + // +-------------------------------+--------------------------+ + // ` - 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{ - pointer.Float64(8.291), - pointer.Float64(0.534), - pointer.Float64(0.667), - }), - ) - expectedFrame.Meta = &data.FrameMeta{} + 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{ + pointer.Float64(8.291), + pointer.Float64(0.534), + pointer.Float64(0.667), + }), + ) + expectedFrame.Meta = &data.FrameMeta{} - diff := cmp.Diff(expectedFrame, dr.Frames[0], data.FrameTestCompareOptions()...) - assert.Empty(t, diff) - }) + diff := cmp.Diff(expectedFrame, dr.Frames[0], data.FrameTestCompareOptions()...) + assert.Empty(t, diff) } func TestNonStandardTimeColumn(t *testing.T) { - t.Run("Time Column", func(t *testing.T) { - dr := verifyGoldenResponse(t, "non_standard_time_column") - require.Len(t, dr.Frames, 1) + dr := verifyGoldenResponse(t, "non_standard_time_column") + require.Len(t, dr.Frames, 1) - str, err := dr.Frames[0].StringTable(-1, -1) - require.NoError(t, err) - fmt.Println(str) + str, err := dr.Frames[0].StringTable(-1, -1) + 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: 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 | + // +-----------------------------------------+------------------+ - 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{ - pointer.Float64(156.304), - }), - ) - expectedFrame.Meta = &data.FrameMeta{} + 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{ + pointer.Float64(156.304), + }), + ) + expectedFrame.Meta = &data.FrameMeta{} - diff := cmp.Diff(expectedFrame, dr.Frames[0], data.FrameTestCompareOptions()...) - assert.Empty(t, diff) - }) + diff := cmp.Diff(expectedFrame, dr.Frames[0], data.FrameTestCompareOptions()...) + assert.Empty(t, diff) } func TestBuckets(t *testing.T) { - t.Run("Buckes", func(t *testing.T) { - verifyGoldenResponse(t, "buckets") - }) + verifyGoldenResponse(t, "buckets") +} + +func TestBooleanGrouping(t *testing.T) { + verifyGoldenResponse(t, "boolean") } func TestGoldenFiles(t *testing.T) { - t.Run("Renamed", func(t *testing.T) { - verifyGoldenResponse(t, "renamed") - }) + verifyGoldenResponse(t, "renamed") } func TestRealQuery(t *testing.T) { diff --git a/pkg/tsdb/influxdb/flux/testdata/boolean.csv b/pkg/tsdb/influxdb/flux/testdata/boolean.csv new file mode 100644 index 00000000000..f56618a28a6 --- /dev/null +++ b/pkg/tsdb/influxdb/flux/testdata/boolean.csv @@ -0,0 +1,9 @@ +#group,false,false,false,false,true,true,false,false,false,true +#datatype,string,long,string,string,dateTime:RFC3339,dateTime:RFC3339,dateTime:RFC3339,long,boolean,string +#default,_result,,,,,,,,, +,result,table,_field,_measurement,_start,_stop,_time,_value,dead,train +,,0,file_size,ingress,2020-10-28T00:07:53.819772368Z,2020-11-11T00:07:53.819772368Z,2020-11-09T17:27:00Z,3339,true,350117 +,,1,file_size,ingress,2020-10-28T00:07:53.819772368Z,2020-11-11T00:07:53.819772368Z,2020-11-10T12:29:00Z,3666,true,350125 +,,2,file_size,ingress,2020-10-28T00:07:53.819772368Z,2020-11-11T00:07:53.819772368Z,2020-11-09T19:01:00Z,3570,true,350236 +,,3,file_size,ingress,2020-10-28T00:07:53.819772368Z,2020-11-11T00:07:53.819772368Z,2020-11-09T07:13:00Z,2772,true,350410 + diff --git a/pkg/tsdb/influxdb/flux/testdata/boolean.golden.txt b/pkg/tsdb/influxdb/flux/testdata/boolean.golden.txt new file mode 100644 index 00000000000..be042b4802f --- /dev/null +++ b/pkg/tsdb/influxdb/flux/testdata/boolean.golden.txt @@ -0,0 +1,58 @@ +🌟 This was machine generated. Do not edit. 🌟 + +Frame[0] {} +Name: ingress +Dimensions: 2 Fields by 1 Rows ++-------------------------------+---------------------------------+ +| Name: Time | Name: file_size | +| Labels: | Labels: dead=true, train=350117 | +| Type: []time.Time | Type: []*int64 | ++-------------------------------+---------------------------------+ +| 2020-11-09 17:27:00 +0000 UTC | 3339 | ++-------------------------------+---------------------------------+ + + + +Frame[1] +Name: ingress +Dimensions: 2 Fields by 1 Rows ++-------------------------------+---------------------------------+ +| Name: Time | Name: file_size | +| Labels: | Labels: dead=true, train=350125 | +| Type: []time.Time | Type: []*int64 | ++-------------------------------+---------------------------------+ +| 2020-11-10 12:29:00 +0000 UTC | 3666 | ++-------------------------------+---------------------------------+ + + + +Frame[2] +Name: ingress +Dimensions: 2 Fields by 1 Rows ++-------------------------------+---------------------------------+ +| Name: Time | Name: file_size | +| Labels: | Labels: dead=true, train=350236 | +| Type: []time.Time | Type: []*int64 | ++-------------------------------+---------------------------------+ +| 2020-11-09 19:01:00 +0000 UTC | 3570 | ++-------------------------------+---------------------------------+ + + + +Frame[3] +Name: ingress +Dimensions: 2 Fields by 1 Rows ++-------------------------------+---------------------------------+ +| Name: Time | Name: file_size | +| Labels: | Labels: dead=true, train=350410 | +| Type: []time.Time | Type: []*int64 | ++-------------------------------+---------------------------------+ +| 2020-11-09 07:13:00 +0000 UTC | 2772 | ++-------------------------------+---------------------------------+ + + +====== TEST DATA RESPONSE (arrow base64) ====== +FRAME=QVJST1cxAAD/////+AEAABAAAAAAAAoADgAMAAsABAAKAAAAFAAAAAAAAAEDAAoADAAAAAgABAAKAAAACAAAAHgAAAADAAAAUAAAACgAAAAEAAAAmP7//wgAAAAMAAAAAAAAAAAAAAAFAAAAcmVmSWQAAAC4/v//CAAAABAAAAAHAAAAaW5ncmVzcwAEAAAAbmFtZQAAAADc/v//CAAAAAwAAAACAAAAe30AAAQAAABtZXRhAAAAAAIAAADgAAAAGAAAAAAAEgAYABQAEwASAAwAAAAIAAQAEgAAABQAAACEAAAAjAAAAAAAAgGQAAAAAgAAADAAAAAEAAAAQP///wgAAAAUAAAACQAAAGZpbGVfc2l6ZQAAAAQAAABuYW1lAAAAAGj///8IAAAALAAAACAAAAB7ImRlYWQiOiJ0cnVlIiwidHJhaW4iOiIzNTAxMTcifQAAAAAGAAAAbGFiZWxzAAAAAAAACAAMAAgABwAIAAAAAAAAAUAAAAAJAAAAZmlsZV9zaXplABIAGAAUAAAAEwAMAAAACAAEABIAAAAUAAAARAAAAEwAAAAAAAAKTAAAAAEAAAAMAAAACAAMAAgABAAIAAAACAAAABAAAAAEAAAAVGltZQAAAAAEAAAAbmFtZQAAAAAAAAAAAAAGAAgABgAGAAAAAAADAAQAAABUaW1lAAAAAP////+4AAAAFAAAAAAAAAAMABYAFAATAAwABAAMAAAAEAAAAAAAAAAUAAAAAAAAAwMACgAYAAwACAAEAAoAAAAUAAAAWAAAAAEAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAAAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAADo6c795kUWCw0AAAAAAAAQAAAADAAUABIADAAIAAQADAAAABAAAAAsAAAAPAAAAAAAAwABAAAACAIAAAAAAADAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAwAAAAIAAQACgAAAAgAAAB4AAAAAwAAAFAAAAAoAAAABAAAAJj+//8IAAAADAAAAAAAAAAAAAAABQAAAHJlZklkAAAAuP7//wgAAAAQAAAABwAAAGluZ3Jlc3MABAAAAG5hbWUAAAAA3P7//wgAAAAMAAAAAgAAAHt9AAAEAAAAbWV0YQAAAAACAAAA4AAAABgAAAAAABIAGAAUABMAEgAMAAAACAAEABIAAAAUAAAAhAAAAIwAAAAAAAIBkAAAAAIAAAAwAAAABAAAAED///8IAAAAFAAAAAkAAABmaWxlX3NpemUAAAAEAAAAbmFtZQAAAABo////CAAAACwAAAAgAAAAeyJkZWFkIjoidHJ1ZSIsInRyYWluIjoiMzUwMTE3In0AAAAABgAAAGxhYmVscwAAAAAAAAgADAAIAAcACAAAAAAAAAFAAAAACQAAAGZpbGVfc2l6ZQASABgAFAAAABMADAAAAAgABAASAAAAFAAAAEQAAABMAAAAAAAACkwAAAABAAAADAAAAAgADAAIAAQACAAAAAgAAAAQAAAABAAAAFRpbWUAAAAABAAAAG5hbWUAAAAAAAAAAAAABgAIAAYABgAAAAAAAwAEAAAAVGltZQAAAAAoAgAAQVJST1cx +FRAME=QVJST1cxAAD/////2AEAABAAAAAAAAoADgAMAAsABAAKAAAAFAAAAAAAAAEDAAoADAAAAAgABAAKAAAACAAAAFQAAAACAAAAKAAAAAQAAAC4/v//CAAAAAwAAAAAAAAAAAAAAAUAAAByZWZJZAAAANj+//8IAAAAEAAAAAcAAABpbmdyZXNzAAQAAABuYW1lAAAAAAIAAADgAAAAGAAAAAAAEgAYABQAEwASAAwAAAAIAAQAEgAAABQAAACEAAAAjAAAAAAAAgGQAAAAAgAAADAAAAAEAAAAQP///wgAAAAUAAAACQAAAGZpbGVfc2l6ZQAAAAQAAABuYW1lAAAAAGj///8IAAAALAAAACAAAAB7ImRlYWQiOiJ0cnVlIiwidHJhaW4iOiIzNTAxMjUifQAAAAAGAAAAbGFiZWxzAAAAAAAACAAMAAgABwAIAAAAAAAAAUAAAAAJAAAAZmlsZV9zaXplABIAGAAUAAAAEwAMAAAACAAEABIAAAAUAAAARAAAAEwAAAAAAAAKTAAAAAEAAAAMAAAACAAMAAgABAAIAAAACAAAABAAAAAEAAAAVGltZQAAAAAEAAAAbmFtZQAAAAAAAAAAAAAGAAgABgAGAAAAAAADAAQAAABUaW1lAAAAAAAAAAD/////uAAAABQAAAAAAAAADAAWABQAEwAMAAQADAAAABAAAAAAAAAAFAAAAAAAAAMDAAoAGAAMAAgABAAKAAAAFAAAAFgAAAABAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAeCxdTyVGFlIOAAAAAAAAEAAAAAwAFAASAAwACAAEAAwAAAAQAAAALAAAADgAAAAAAAMAAQAAAOgBAAAAAAAAwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAKAAwAAAAIAAQACgAAAAgAAABUAAAAAgAAACgAAAAEAAAAuP7//wgAAAAMAAAAAAAAAAAAAAAFAAAAcmVmSWQAAADY/v//CAAAABAAAAAHAAAAaW5ncmVzcwAEAAAAbmFtZQAAAAACAAAA4AAAABgAAAAAABIAGAAUABMAEgAMAAAACAAEABIAAAAUAAAAhAAAAIwAAAAAAAIBkAAAAAIAAAAwAAAABAAAAED///8IAAAAFAAAAAkAAABmaWxlX3NpemUAAAAEAAAAbmFtZQAAAABo////CAAAACwAAAAgAAAAeyJkZWFkIjoidHJ1ZSIsInRyYWluIjoiMzUwMTI1In0AAAAABgAAAGxhYmVscwAAAAAAAAgADAAIAAcACAAAAAAAAAFAAAAACQAAAGZpbGVfc2l6ZQASABgAFAAAABMADAAAAAgABAASAAAAFAAAAEQAAABMAAAAAAAACkwAAAABAAAADAAAAAgADAAIAAQACAAAAAgAAAAQAAAABAAAAFRpbWUAAAAABAAAAG5hbWUAAAAAAAAAAAAABgAIAAYABgAAAAAAAwAEAAAAVGltZQAAAAAAAgAAQVJST1cx +FRAME=QVJST1cxAAD/////2AEAABAAAAAAAAoADgAMAAsABAAKAAAAFAAAAAAAAAEDAAoADAAAAAgABAAKAAAACAAAAFQAAAACAAAAKAAAAAQAAAC4/v//CAAAAAwAAAAAAAAAAAAAAAUAAAByZWZJZAAAANj+//8IAAAAEAAAAAcAAABpbmdyZXNzAAQAAABuYW1lAAAAAAIAAADgAAAAGAAAAAAAEgAYABQAEwASAAwAAAAIAAQAEgAAABQAAACEAAAAjAAAAAAAAgGQAAAAAgAAADAAAAAEAAAAQP///wgAAAAUAAAACQAAAGZpbGVfc2l6ZQAAAAQAAABuYW1lAAAAAGj///8IAAAALAAAACAAAAB7ImRlYWQiOiJ0cnVlIiwidHJhaW4iOiIzNTAyMzYifQAAAAAGAAAAbGFiZWxzAAAAAAAACAAMAAgABwAIAAAAAAAAAUAAAAAJAAAAZmlsZV9zaXplABIAGAAUAAAAEwAMAAAACAAEABIAAAAUAAAARAAAAEwAAAAAAAAKTAAAAAEAAAAMAAAACAAMAAgABAAIAAAACAAAABAAAAAEAAAAVGltZQAAAAAEAAAAbmFtZQAAAAAAAAAAAAAGAAgABgAGAAAAAAADAAQAAABUaW1lAAAAAAAAAAD/////uAAAABQAAAAAAAAADAAWABQAEwAMAAQADAAAABAAAAAAAAAAFAAAAAAAAAMDAAoAGAAMAAgABAAKAAAAFAAAAFgAAAABAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAOBz5HuxFFvINAAAAAAAAEAAAAAwAFAASAAwACAAEAAwAAAAQAAAALAAAADgAAAAAAAMAAQAAAOgBAAAAAAAAwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAKAAwAAAAIAAQACgAAAAgAAABUAAAAAgAAACgAAAAEAAAAuP7//wgAAAAMAAAAAAAAAAAAAAAFAAAAcmVmSWQAAADY/v//CAAAABAAAAAHAAAAaW5ncmVzcwAEAAAAbmFtZQAAAAACAAAA4AAAABgAAAAAABIAGAAUABMAEgAMAAAACAAEABIAAAAUAAAAhAAAAIwAAAAAAAIBkAAAAAIAAAAwAAAABAAAAED///8IAAAAFAAAAAkAAABmaWxlX3NpemUAAAAEAAAAbmFtZQAAAABo////CAAAACwAAAAgAAAAeyJkZWFkIjoidHJ1ZSIsInRyYWluIjoiMzUwMjM2In0AAAAABgAAAGxhYmVscwAAAAAAAAgADAAIAAcACAAAAAAAAAFAAAAACQAAAGZpbGVfc2l6ZQASABgAFAAAABMADAAAAAgABAASAAAAFAAAAEQAAABMAAAAAAAACkwAAAABAAAADAAAAAgADAAIAAQACAAAAAgAAAAQAAAABAAAAFRpbWUAAAAABAAAAG5hbWUAAAAAAAAAAAAABgAIAAYABgAAAAAAAwAEAAAAVGltZQAAAAAAAgAAQVJST1cx +FRAME=QVJST1cxAAD/////2AEAABAAAAAAAAoADgAMAAsABAAKAAAAFAAAAAAAAAEDAAoADAAAAAgABAAKAAAACAAAAFQAAAACAAAAKAAAAAQAAAC4/v//CAAAAAwAAAAAAAAAAAAAAAUAAAByZWZJZAAAANj+//8IAAAAEAAAAAcAAABpbmdyZXNzAAQAAABuYW1lAAAAAAIAAADgAAAAGAAAAAAAEgAYABQAEwASAAwAAAAIAAQAEgAAABQAAACEAAAAjAAAAAAAAgGQAAAAAgAAADAAAAAEAAAAQP///wgAAAAUAAAACQAAAGZpbGVfc2l6ZQAAAAQAAABuYW1lAAAAAGj///8IAAAALAAAACAAAAB7ImRlYWQiOiJ0cnVlIiwidHJhaW4iOiIzNTA0MTAifQAAAAAGAAAAbGFiZWxzAAAAAAAACAAMAAgABwAIAAAAAAAAAUAAAAAJAAAAZmlsZV9zaXplABIAGAAUAAAAEwAMAAAACAAEABIAAAAUAAAARAAAAEwAAAAAAAAKTAAAAAEAAAAMAAAACAAMAAgABAAIAAAACAAAABAAAAAEAAAAVGltZQAAAAAEAAAAbmFtZQAAAAAAAAAAAAAGAAgABgAGAAAAAAADAAQAAABUaW1lAAAAAAAAAAD/////uAAAABQAAAAAAAAADAAWABQAEwAMAAQADAAAABAAAAAAAAAAFAAAAAAAAAMDAAoAGAAMAAgABAAKAAAAFAAAAFgAAAABAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA2MxTfMVFFtQKAAAAAAAAEAAAAAwAFAASAAwACAAEAAwAAAAQAAAALAAAADgAAAAAAAMAAQAAAOgBAAAAAAAAwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAKAAwAAAAIAAQACgAAAAgAAABUAAAAAgAAACgAAAAEAAAAuP7//wgAAAAMAAAAAAAAAAAAAAAFAAAAcmVmSWQAAADY/v//CAAAABAAAAAHAAAAaW5ncmVzcwAEAAAAbmFtZQAAAAACAAAA4AAAABgAAAAAABIAGAAUABMAEgAMAAAACAAEABIAAAAUAAAAhAAAAIwAAAAAAAIBkAAAAAIAAAAwAAAABAAAAED///8IAAAAFAAAAAkAAABmaWxlX3NpemUAAAAEAAAAbmFtZQAAAABo////CAAAACwAAAAgAAAAeyJkZWFkIjoidHJ1ZSIsInRyYWluIjoiMzUwNDEwIn0AAAAABgAAAGxhYmVscwAAAAAAAAgADAAIAAcACAAAAAAAAAFAAAAACQAAAGZpbGVfc2l6ZQASABgAFAAAABMADAAAAAgABAASAAAAFAAAAEQAAABMAAAAAAAACkwAAAABAAAADAAAAAgADAAIAAQACAAAAAgAAAAQAAAABAAAAFRpbWUAAAAABAAAAG5hbWUAAAAAAAAAAAAABgAIAAYABgAAAAAAAwAEAAAAVGltZQAAAAAAAgAAQVJST1cx diff --git a/pkg/tsdb/influxdb/flux/testdata/multiple.csv b/pkg/tsdb/influxdb/flux/testdata/multiple.csv index 9bd45c4dbd9..a9d14aa9420 100644 --- a/pkg/tsdb/influxdb/flux/testdata/multiple.csv +++ b/pkg/tsdb/influxdb/flux/testdata/multiple.csv @@ -10,12 +10,6 @@ ,result,table,_start,_stop,_time,_value,_field,_measurement,a,b ,,1,2020-02-17T22:19:49.747562847Z,2020-02-18T22:19:49.747562847Z,2020-02-18T10:34:08.135814545Z,4,i,test,1,adsfasdf ,,1,2020-02-17T22:19:49.747562847Z,2020-02-18T22:19:49.747562847Z,2020-02-18T22:08:44.850214724Z,-1,i,test,1,adsfasdf -#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,dateTime:RFC3339,bool,string,string,string,string -#group,false,false,true,true,false,false,true,true,true,true -#default,_result,,,,,,,,, -,result,table,_start,_stop,_time,_value,_field,_measurement,a,b -,,2,2020-02-17T22:19:49.747562847Z,2020-02-18T22:19:49.747562847Z,2020-02-18T22:08:44.62797864Z,false,f,test,0,adsfasdf -,,2,2020-02-17T22:19:49.747562847Z,2020-02-18T22:19:49.747562847Z,2020-02-18T22:08:44.969100374Z,true,f,test,0,adsfasdf #datatype,string,long,dateTime:RFC3339Nano,dateTime:RFC3339Nano,dateTime:RFC3339Nano,unsignedLong,string,string,string,string #group,false,false,true,true,false,false,true,true,true,true #default,_result,,,,,,,,, diff --git a/pkg/tsdb/influxdb/flux/testdata/multiple.golden.txt b/pkg/tsdb/influxdb/flux/testdata/multiple.golden.txt index cbd3ff4bd20..e04aaf1e863 100644 --- a/pkg/tsdb/influxdb/flux/testdata/multiple.golden.txt +++ b/pkg/tsdb/influxdb/flux/testdata/multiple.golden.txt @@ -32,20 +32,6 @@ Frame[2] Name: test Dimensions: 2 Fields by 2 Rows +-----------------------------------------+-------------------------+ -| Name: Time | Name: f | -| Labels: | Labels: a=0, b=adsfasdf | -| Type: []time.Time | Type: []*bool | -+-----------------------------------------+-------------------------+ -| 2020-02-18 22:08:44.62797864 +0000 UTC | false | -| 2020-02-18 22:08:44.969100374 +0000 UTC | true | -+-----------------------------------------+-------------------------+ - - - -Frame[3] -Name: test -Dimensions: 2 Fields by 2 Rows -+-----------------------------------------+-------------------------+ | Name: _start | Name: i | | Labels: | Labels: a=0, b=adsfasdf | | Type: []time.Time | Type: []*uint64 | @@ -58,5 +44,4 @@ Dimensions: 2 Fields by 2 Rows ====== TEST DATA RESPONSE (arrow base64) ====== FRAME=QVJST1cxAAD/////2AEAABAAAAAAAAoADgAMAAsABAAKAAAAFAAAAAAAAAEDAAoADAAAAAgABAAKAAAACAAAAHgAAAADAAAAUAAAACgAAAAEAAAAvP7//wgAAAAMAAAAAAAAAAAAAAAFAAAAcmVmSWQAAADc/v//CAAAABAAAAAEAAAAdGVzdAAAAAAEAAAAbmFtZQAAAAAA////CAAAAAwAAAACAAAAe30AAAQAAABtZXRhAAAAAAIAAAC8AAAAGAAAAAAAEgAYABQAEwASAAwAAAAIAAQAEgAAABQAAAB0AAAAdAAAAAAAAwF0AAAAAgAAACgAAAAEAAAAZP///wgAAAAMAAAAAQAAAGYAAAAEAAAAbmFtZQAAAACE////CAAAACQAAAAYAAAAeyJhIjoiMSIsImIiOiJhZHNmYXNkZiJ9AAAAAAYAAABsYWJlbHMAAAAAAACO////AAACAAEAAABmABIAGAAUAAAAEwAMAAAACAAEABIAAAAUAAAARAAAAEwAAAAAAAAKTAAAAAEAAAAMAAAACAAMAAgABAAIAAAACAAAABAAAAAEAAAAVGltZQAAAAAEAAAAbmFtZQAAAAAAAAAAAAAGAAgABgAGAAAAAAADAAQAAABUaW1lAAAAAAAAAAD/////uAAAABQAAAAAAAAADAAWABQAEwAMAAQADAAAACAAAAAAAAAAFAAAAAAAAAMDAAoAGAAMAAgABAAKAAAAFAAAAFgAAAACAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACRnfi9q3j0FUR3uluTnvQVZmZmZmZm9j9mZmZmZmYaQBAAAAAMABQAEgAMAAgABAAMAAAAEAAAACwAAAA4AAAAAAADAAEAAADoAQAAAAAAAMAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAMAAAACAAEAAoAAAAIAAAAeAAAAAMAAABQAAAAKAAAAAQAAAC8/v//CAAAAAwAAAAAAAAAAAAAAAUAAAByZWZJZAAAANz+//8IAAAAEAAAAAQAAAB0ZXN0AAAAAAQAAABuYW1lAAAAAAD///8IAAAADAAAAAIAAAB7fQAABAAAAG1ldGEAAAAAAgAAALwAAAAYAAAAAAASABgAFAATABIADAAAAAgABAASAAAAFAAAAHQAAAB0AAAAAAADAXQAAAACAAAAKAAAAAQAAABk////CAAAAAwAAAABAAAAZgAAAAQAAABuYW1lAAAAAIT///8IAAAAJAAAABgAAAB7ImEiOiIxIiwiYiI6ImFkc2Zhc2RmIn0AAAAABgAAAGxhYmVscwAAAAAAAI7///8AAAIAAQAAAGYAEgAYABQAAAATAAwAAAAIAAQAEgAAABQAAABEAAAATAAAAAAAAApMAAAAAQAAAAwAAAAIAAwACAAEAAgAAAAIAAAAEAAAAAQAAABUaW1lAAAAAAQAAABuYW1lAAAAAAAAAAAAAAYACAAGAAYAAAAAAAMABAAAAFRpbWUAAAAAAAIAAEFSUk9XMQ== FRAME=QVJST1cxAAD/////wAEAABAAAAAAAAoADgAMAAsABAAKAAAAFAAAAAAAAAEDAAoADAAAAAgABAAKAAAACAAAAFQAAAACAAAAKAAAAAQAAADQ/v//CAAAAAwAAAAAAAAAAAAAAAUAAAByZWZJZAAAAPD+//8IAAAAEAAAAAQAAAB0ZXN0AAAAAAQAAABuYW1lAAAAAAIAAADIAAAAGAAAAAAAEgAYABQAEwASAAwAAAAIAAQAEgAAABQAAAB0AAAAfAAAAAAAAgGAAAAAAgAAACgAAAAEAAAAWP///wgAAAAMAAAAAQAAAGkAAAAEAAAAbmFtZQAAAAB4////CAAAACQAAAAYAAAAeyJhIjoiMSIsImIiOiJhZHNmYXNkZiJ9AAAAAAYAAABsYWJlbHMAAAAAAAAIAAwACAAHAAgAAAAAAAABQAAAAAEAAABpABIAGAAUAAAAEwAMAAAACAAEABIAAAAUAAAARAAAAEwAAAAAAAAKTAAAAAEAAAAMAAAACAAMAAgABAAIAAAACAAAABAAAAAEAAAAVGltZQAAAAAEAAAAbmFtZQAAAAAAAAAAAAAGAAgABgAGAAAAAAADAAQAAABUaW1lAAAAAAAAAAD/////uAAAABQAAAAAAAAADAAWABQAEwAMAAQADAAAACAAAAAAAAAAFAAAAAAAAAMDAAoAGAAMAAgABAAKAAAAFAAAAFgAAAACAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACRnfi9q3j0FUR3uluTnvQVBAAAAAAAAAD//////////xAAAAAMABQAEgAMAAgABAAMAAAAEAAAACwAAAA4AAAAAAADAAEAAADQAQAAAAAAAMAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAMAAAACAAEAAoAAAAIAAAAVAAAAAIAAAAoAAAABAAAAND+//8IAAAADAAAAAAAAAAAAAAABQAAAHJlZklkAAAA8P7//wgAAAAQAAAABAAAAHRlc3QAAAAABAAAAG5hbWUAAAAAAgAAAMgAAAAYAAAAAAASABgAFAATABIADAAAAAgABAASAAAAFAAAAHQAAAB8AAAAAAACAYAAAAACAAAAKAAAAAQAAABY////CAAAAAwAAAABAAAAaQAAAAQAAABuYW1lAAAAAHj///8IAAAAJAAAABgAAAB7ImEiOiIxIiwiYiI6ImFkc2Zhc2RmIn0AAAAABgAAAGxhYmVscwAAAAAAAAgADAAIAAcACAAAAAAAAAFAAAAAAQAAAGkAEgAYABQAAAATAAwAAAAIAAQAEgAAABQAAABEAAAATAAAAAAAAApMAAAAAQAAAAwAAAAIAAwACAAEAAgAAAAIAAAAEAAAAAQAAABUaW1lAAAAAAQAAABuYW1lAAAAAAAAAAAAAAYACAAGAAYAAAAAAAMABAAAAFRpbWUAAAAA6AEAAEFSUk9XMQ== -FRAME=QVJST1cxAAD/////sAEAABAAAAAAAAoADgAMAAsABAAKAAAAFAAAAAAAAAEDAAoADAAAAAgABAAKAAAACAAAAFQAAAACAAAAKAAAAAQAAADc/v//CAAAAAwAAAAAAAAAAAAAAAUAAAByZWZJZAAAAPz+//8IAAAAEAAAAAQAAAB0ZXN0AAAAAAQAAABuYW1lAAAAAAIAAAC8AAAAGAAAAAAAEgAYABQAEwASAAwAAAAIAAQAEgAAABQAAAB0AAAAeAAAAAAABgF0AAAAAgAAACgAAAAEAAAAZP///wgAAAAMAAAAAQAAAGYAAAAEAAAAbmFtZQAAAACE////CAAAACQAAAAYAAAAeyJhIjoiMCIsImIiOiJhZHNmYXNkZiJ9AAAAAAYAAABsYWJlbHMAAAAAAAAEAAQABAAAAAEAAABmABIAGAAUAAAAEwAMAAAACAAEABIAAAAUAAAARAAAAEwAAAAAAAAKTAAAAAEAAAAMAAAACAAMAAgABAAIAAAACAAAABAAAAAEAAAAVGltZQAAAAAEAAAAbmFtZQAAAAAAAAAAAAAGAAgABgAGAAAAAAADAAQAAABUaW1lAAAAAP////+4AAAAFAAAAAAAAAAMABYAFAATAAwABAAMAAAAGAAAAAAAAAAUAAAAAAAAAwMACgAYAAwACAAEAAoAAAAUAAAAWAAAAAIAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAgAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAJBpe06TnvQVVoTQYpOe9BUCAAAAAAAAABAAAAAMABQAEgAMAAgABAAMAAAAEAAAACwAAAA8AAAAAAADAAEAAADAAQAAAAAAAMAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoADAAAAAgABAAKAAAACAAAAFQAAAACAAAAKAAAAAQAAADc/v//CAAAAAwAAAAAAAAAAAAAAAUAAAByZWZJZAAAAPz+//8IAAAAEAAAAAQAAAB0ZXN0AAAAAAQAAABuYW1lAAAAAAIAAAC8AAAAGAAAAAAAEgAYABQAEwASAAwAAAAIAAQAEgAAABQAAAB0AAAAeAAAAAAABgF0AAAAAgAAACgAAAAEAAAAZP///wgAAAAMAAAAAQAAAGYAAAAEAAAAbmFtZQAAAACE////CAAAACQAAAAYAAAAeyJhIjoiMCIsImIiOiJhZHNmYXNkZiJ9AAAAAAYAAABsYWJlbHMAAAAAAAAEAAQABAAAAAEAAABmABIAGAAUAAAAEwAMAAAACAAEABIAAAAUAAAARAAAAEwAAAAAAAAKTAAAAAEAAAAMAAAACAAMAAgABAAIAAAACAAAABAAAAAEAAAAVGltZQAAAAAEAAAAbmFtZQAAAAAAAAAAAAAGAAgABgAGAAAAAAADAAQAAABUaW1lAAAAAOABAABBUlJPVzE= FRAME=QVJST1cxAAD/////uAEAABAAAAAAAAoADgAMAAsABAAKAAAAFAAAAAAAAAEDAAoADAAAAAgABAAKAAAACAAAAFQAAAACAAAAKAAAAAQAAADU/v//CAAAAAwAAAAAAAAAAAAAAAUAAAByZWZJZAAAAPT+//8IAAAAEAAAAAQAAAB0ZXN0AAAAAAQAAABuYW1lAAAAAAIAAADEAAAAGAAAAAAAEgAYABQAEwASAAwAAAAIAAQAEgAAABQAAAB0AAAAfAAAAAAAAgF8AAAAAgAAACgAAAAEAAAAXP///wgAAAAMAAAAAQAAAGkAAAAEAAAAbmFtZQAAAAB8////CAAAACQAAAAYAAAAeyJhIjoiMCIsImIiOiJhZHNmYXNkZiJ9AAAAAAYAAABsYWJlbHMAAAAAAAAAAAYACAAEAAYAAABAAAAAAQAAAGkAEgAYABQAAAATAAwAAAAIAAQAEgAAABQAAABEAAAATAAAAAAAAApMAAAAAQAAAAwAAAAIAAwACAAEAAgAAAAIAAAAEAAAAAYAAABfc3RhcnQAAAQAAABuYW1lAAAAAAAAAAAAAAYACAAGAAYAAAAAAAMABgAAAF9zdGFydAAA/////7gAAAAUAAAAAAAAAAwAFgAUABMADAAEAAwAAAAgAAAAAAAAABQAAAAAAAADAwAKABgADAAIAAQACgAAABQAAABYAAAAAgAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAX9ljmZlQ9BVf2WOZmVD0FQAAAAAAAAAAAgAAAAAAAAAQAAAADAAUABIADAAIAAQADAAAABAAAAAsAAAAPAAAAAAAAwABAAAAyAEAAAAAAADAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAwAAAAIAAQACgAAAAgAAABUAAAAAgAAACgAAAAEAAAA1P7//wgAAAAMAAAAAAAAAAAAAAAFAAAAcmVmSWQAAAD0/v//CAAAABAAAAAEAAAAdGVzdAAAAAAEAAAAbmFtZQAAAAACAAAAxAAAABgAAAAAABIAGAAUABMAEgAMAAAACAAEABIAAAAUAAAAdAAAAHwAAAAAAAIBfAAAAAIAAAAoAAAABAAAAFz///8IAAAADAAAAAEAAABpAAAABAAAAG5hbWUAAAAAfP///wgAAAAkAAAAGAAAAHsiYSI6IjAiLCJiIjoiYWRzZmFzZGYifQAAAAAGAAAAbGFiZWxzAAAAAAAAAAAGAAgABAAGAAAAQAAAAAEAAABpABIAGAAUAAAAEwAMAAAACAAEABIAAAAUAAAARAAAAEwAAAAAAAAKTAAAAAEAAAAMAAAACAAMAAgABAAIAAAACAAAABAAAAAGAAAAX3N0YXJ0AAAEAAAAbmFtZQAAAAAAAAAAAAAGAAgABgAGAAAAAAADAAYAAABfc3RhcnQAAOgBAABBUlJPVzE=