From 14069b95f231440a9254b8ec5c700d397d90adf3 Mon Sep 17 00:00:00 2001 From: huanggze Date: Mon, 18 May 2020 21:38:52 +0800 Subject: [PATCH] monitoring: fix metric value NaN Signed-off-by: huanggze --- pkg/models/monitoring/sort_page.go | 15 +- pkg/models/monitoring/sort_page_test.go | 26 +- .../testdata/blank-node-metrics-sorted.json | 12 +- .../testdata/blank-node-metrics.json | 16 +- ...etrics.json => faulty-node-metrics-1.json} | 16 +- .../testdata/faulty-node-metrics-2.json | 232 ++++++++++++++++ .../testdata/faulty-node-metrics-3.json | 244 +++++++++++++++++ .../testdata/faulty-node-metrics-paged.json | 8 +- ...json => faulty-node-metrics-sorted-1.json} | 16 +- .../faulty-node-metrics-sorted-2.json | 235 +++++++++++++++++ .../faulty-node-metrics-sorted-3.json | 247 ++++++++++++++++++ .../testdata/null-node-metrics-sorted.json | 6 +- .../testdata/null-node-metrics.json | 6 +- .../testdata/paged-node-metrics-1.json | 30 +-- .../testdata/paged-node-metrics-2.json | 18 +- .../testdata/sorted-node-metrics-asc.json | 48 ++-- .../testdata/sorted-node-metrics-desc.json | 48 ++-- .../testdata/source-node-metrics.json | 48 ++-- .../testdata/metrics-matrix-type-res.json | 60 ++--- .../testdata/metrics-vector-type-res.json | 8 +- pkg/simple/client/monitoring/types.go | 56 ++++ 21 files changed, 1220 insertions(+), 175 deletions(-) rename pkg/models/monitoring/testdata/{faulty-node-metrics.json => faulty-node-metrics-1.json} (85%) create mode 100644 pkg/models/monitoring/testdata/faulty-node-metrics-2.json create mode 100644 pkg/models/monitoring/testdata/faulty-node-metrics-3.json rename pkg/models/monitoring/testdata/{faulty-node-metrics-sorted.json => faulty-node-metrics-sorted-1.json} (85%) create mode 100644 pkg/models/monitoring/testdata/faulty-node-metrics-sorted-2.json create mode 100644 pkg/models/monitoring/testdata/faulty-node-metrics-sorted-3.json diff --git a/pkg/models/monitoring/sort_page.go b/pkg/models/monitoring/sort_page.go index 4bad34c80..b80296c36 100644 --- a/pkg/models/monitoring/sort_page.go +++ b/pkg/models/monitoring/sort_page.go @@ -50,9 +50,22 @@ func (w wrapper) Less(i, j int) bool { p := w.MetricValues[i] q := w.MetricValues[j] - if p.Sample.Value() == q.Sample.Value() { + // Place Nil to the tail. + if p.Sample == nil && q.Sample != nil { + return false + } + if p.Sample != nil && q.Sample == nil { + return true + } + + // If both Samples are Nil or have the same metric value, sort by resource name + if p.Sample == q.Sample || p.Sample[1] == q.Sample[1] { return p.Metadata[w.identifier] < q.Metadata[w.identifier] } + // Place NaN to the tail (NaN takes precedence over Nil). + if math.IsNaN(p.Sample[1]) != math.IsNaN(q.Sample[1]) { + return !math.IsNaN(p.Sample[1]) + } switch w.order { case OrderAscending: diff --git a/pkg/models/monitoring/sort_page_test.go b/pkg/models/monitoring/sort_page_test.go index cdb750cef..c75162412 100644 --- a/pkg/models/monitoring/sort_page_test.go +++ b/pkg/models/monitoring/sort_page_test.go @@ -5,6 +5,7 @@ import ( "github.com/google/go-cmp/cmp" "github.com/json-iterator/go" "io/ioutil" + "math" "testing" ) @@ -34,8 +35,22 @@ func TestSort(t *testing.T) { target: "node_memory_utilisation", order: "desc", identifier: "node", - raw: "faulty-node-metrics.json", - expected: "faulty-node-metrics-sorted.json", + raw: "faulty-node-metrics-1.json", + expected: "faulty-node-metrics-sorted-1.json", + }, + { + target: "node_cpu_utilisation", + order: "asc", + identifier: "node", + raw: "faulty-node-metrics-2.json", + expected: "faulty-node-metrics-sorted-2.json", + }, + { + target: "node_cpu_utilisation", + order: "asc", + identifier: "node", + raw: "faulty-node-metrics-3.json", + expected: "faulty-node-metrics-sorted-3.json", }, { target: "node_memory_utilisation", @@ -61,7 +76,10 @@ func TestSort(t *testing.T) { } result := source.Sort(tt.target, tt.order, tt.identifier) - if diff := cmp.Diff(*result, *expected); diff != "" { + opt := cmp.Comparer(func(x, y float64) bool { + return (math.IsNaN(x) && math.IsNaN(y)) || x == y + }) + if diff := cmp.Diff(*result, *expected, opt); diff != "" { t.Fatalf("%T differ (-got, +want): %s", expected, diff) } }) @@ -102,7 +120,7 @@ func TestPage(t *testing.T) { { page: 1, limit: 2, - raw: "faulty-node-metrics-sorted.json", + raw: "faulty-node-metrics-sorted-1.json", expected: "faulty-node-metrics-paged.json", }, } diff --git a/pkg/models/monitoring/testdata/blank-node-metrics-sorted.json b/pkg/models/monitoring/testdata/blank-node-metrics-sorted.json index 968fcf750..578856679 100644 --- a/pkg/models/monitoring/testdata/blank-node-metrics-sorted.json +++ b/pkg/models/monitoring/testdata/blank-node-metrics-sorted.json @@ -11,7 +11,7 @@ }, "value":[ 1585658599.193, - 0.42012898861983516 + "0.42012898861983516" ] }, { @@ -20,7 +20,7 @@ }, "value":[ 1585658599.193, - 0.2588273152865106 + "0.2588273152865106" ] }, { @@ -29,7 +29,7 @@ }, "value":[ 1585658599.193, - 0.29849334024542695 + "0.29849334024542695" ] } ] @@ -46,7 +46,7 @@ }, "value":[ 1585658599.195, - 0.5286875837861773 + "0.5286875837861773" ] }, { @@ -55,7 +55,7 @@ }, "value":[ 1585658599.195, - 0.2497060264216553 + "0.2497060264216553" ] }, { @@ -64,7 +64,7 @@ }, "value":[ 1585658599.195, - 0.23637090535053928 + "0.23637090535053928" ] } ] diff --git a/pkg/models/monitoring/testdata/blank-node-metrics.json b/pkg/models/monitoring/testdata/blank-node-metrics.json index e70a6b291..74b7dd256 100644 --- a/pkg/models/monitoring/testdata/blank-node-metrics.json +++ b/pkg/models/monitoring/testdata/blank-node-metrics.json @@ -11,7 +11,7 @@ }, "value": [ 1585658599.193, - 0.42012898861983516 + "0.42012898861983516" ] }, { @@ -20,7 +20,7 @@ }, "value": [ 1585658599.193, - 0.2601006025131434 + "0.2601006025131434" ] }, { @@ -29,7 +29,7 @@ }, "value": [ 1585658599.193, - 0.29849334024542695 + "0.29849334024542695" ] }, { @@ -38,7 +38,7 @@ }, "value": [ 1585658599.193, - 0.2588273152865106 + "0.2588273152865106" ] } ] @@ -55,7 +55,7 @@ }, "value": [ 1585658599.195, - 0.5286875837861773 + "0.5286875837861773" ] }, { @@ -64,7 +64,7 @@ }, "value": [ 1585658599.195, - 0.1446648505469157 + "0.1446648505469157" ] }, { @@ -73,7 +73,7 @@ }, "value": [ 1585658599.195, - 0.23637090535053928 + "0.23637090535053928" ] }, { @@ -82,7 +82,7 @@ }, "value": [ 1585658599.195, - 0.2497060264216553 + "0.2497060264216553" ] } ] diff --git a/pkg/models/monitoring/testdata/faulty-node-metrics.json b/pkg/models/monitoring/testdata/faulty-node-metrics-1.json similarity index 85% rename from pkg/models/monitoring/testdata/faulty-node-metrics.json rename to pkg/models/monitoring/testdata/faulty-node-metrics-1.json index e72b9aeca..3f4d8aad4 100644 --- a/pkg/models/monitoring/testdata/faulty-node-metrics.json +++ b/pkg/models/monitoring/testdata/faulty-node-metrics-1.json @@ -15,7 +15,7 @@ }, "value": [ 1585658599.193, - 0.42012898861983516 + "0.42012898861983516" ] }, { @@ -24,7 +24,7 @@ }, "value": [ 1585658599.193, - 0.2601006025131434 + "0.2601006025131434" ] }, { @@ -33,7 +33,7 @@ }, "value": [ 1585658599.193, - 0.29849334024542695 + "0.29849334024542695" ] }, { @@ -42,7 +42,7 @@ }, "value": [ 1585658599.193, - 0.2588273152865106 + "0.2588273152865106" ] } ] @@ -59,7 +59,7 @@ }, "value": [ 1585658599.195, - 0.5286875837861773 + "0.5286875837861773" ] }, { @@ -68,7 +68,7 @@ }, "value": [ 1585658599.195, - 0.1446648505469157 + "0.1446648505469157" ] }, { @@ -77,7 +77,7 @@ }, "value": [ 1585658599.195, - 0.23637090535053928 + "0.23637090535053928" ] }, { @@ -86,7 +86,7 @@ }, "value": [ 1585658599.195, - 0.2497060264216553 + "0.2497060264216553" ] } ] diff --git a/pkg/models/monitoring/testdata/faulty-node-metrics-2.json b/pkg/models/monitoring/testdata/faulty-node-metrics-2.json new file mode 100644 index 000000000..fc486c7f7 --- /dev/null +++ b/pkg/models/monitoring/testdata/faulty-node-metrics-2.json @@ -0,0 +1,232 @@ +{ + "results": [ + { + "metric_name": "node_cpu_utilisation", + "data": { + "resultType": "vector", + "result": [ + { + "metric": { + "node": "i-2dazc1d6" + }, + "value": [ + 1585658599.193, + "0.18095833333306172" + ] + }, + { + "metric": { + "node": "i-9jtsi522" + }, + "value": [ + 1585658599.193, + "0.03250000000007276" + ] + }, + { + "metric": { + "node": "i-ezjb7gsk" + }, + "value": [ + 1585658599.193, + "0.07443750000044626" + ] + }, + { + "metric": { + "node": "i-hgcoippu" + }, + "value": [ + 1585658599.193, + "0.05066666666655995" + ] + }, + { + "metric": { + "node": "i-ircdnrao" + }, + "value": [ + 1585658599.193, + "0.05210416666595847" + ] + }, + { + "metric": { + "node": "i-o13skypq" + }, + "value": [ + 1585658599.193, + "0.07756249999996119" + ] + }, + { + "metric": { + "node": "i-tl1i71hr" + } + }, + { + "metric": { + "node": "i-xfcxdn7z" + }, + "value": [ + 1585658599.193, + "0.06745833333334303" + ] + } + ] + } + }, + { + "metric_name": "node_disk_size_utilisation", + "data": { + "resultType": "vector", + "result": [ + { + "metric": { + "node": "i-2dazc1d6" + }, + "value": [ + 1585658599.193, + "0.42012898861983516" + ] + }, + { + "metric": { + "node": "i-9jtsi522" + }, + "value": [ + 1585658599.193, + "0.2601006025131434" + ] + }, + { + "metric": { + "node": "i-ezjb7gsk" + }, + "value": [ + 1585658599.193, + "0.29849334024542695" + ] + }, + { + "metric": { + "node": "i-hgcoippu" + }, + "value": [ + 1585658599.193, + "0.2588273152865106" + ] + }, + { + "metric": { + "node": "i-ircdnrao" + }, + "value": [ + 1585658599.193, + "0.21351118996831508" + ] + }, + { + "metric": { + "node": "i-o13skypq" + }, + "value": [ + 1585658599.193, + "0.4329682466178235" + ] + }, + { + "metric": { + "node": "i-tl1i71hr" + } + }, + { + "metric": { + "node": "i-xfcxdn7z" + }, + "value": [ + 1585658599.193, + "0.35981263055856705" + ] + } + ] + } + }, + { + "metric_name": "node_memory_utilisation", + "data": { + "resultType": "vector", + "result": [ + { + "metric": { + "node": "i-2dazc1d6" + }, + "value": [ + 1585658599.195, + "0.5286875837861773" + ] + }, + { + "metric": { + "node": "i-9jtsi522" + }, + "value": [ + 1585658599.195, + "0.1446648505469157" + ] + }, + { + "metric": { + "node": "i-ezjb7gsk" + }, + "value": [ + 1585658599.195, + "0.23637090535053928" + ] + }, + { + "metric": { + "node": "i-hgcoippu" + }, + "value": [ + 1585658599.195, + "0.2497060264216553" + ] + }, + { + "metric": { + "node": "i-ircdnrao" + }, + "value": [ + 1585658599.195, + "0.21291125105270192" + ] + }, + { + "metric": { + "node": "i-o13skypq" + }, + "value": [ + 1585658599.195, + "0.823247832787681" + ] + }, + { + "metric": { + "node": "i-tl1i71hr" + } + }, + { + "metric": { + "node": "i-xfcxdn7z" + }, + "value": [ + 1585658599.195, + "0.40309723127991315" + ] + } + ] + } + } + ] +} \ No newline at end of file diff --git a/pkg/models/monitoring/testdata/faulty-node-metrics-3.json b/pkg/models/monitoring/testdata/faulty-node-metrics-3.json new file mode 100644 index 000000000..ff4b29e6e --- /dev/null +++ b/pkg/models/monitoring/testdata/faulty-node-metrics-3.json @@ -0,0 +1,244 @@ +{ + "results": [ + { + "metric_name": "node_cpu_utilisation", + "data": { + "resultType": "vector", + "result": [ + { + "metric": { + "node": "i-2dazc1d6" + }, + "value": [ + 1585658599.193, + "0.18095833333306172" + ] + }, + { + "metric": { + "node": "i-9jtsi522" + }, + "value": [ + 1585658599.193, + "+Inf" + ] + }, + { + "metric": { + "node": "i-ezjb7gsk" + }, + "value": [ + 1585658599.193, + "0.07443750000044626" + ] + }, + { + "metric": { + "node": "i-hgcoippu" + }, + "value": [ + 1585658599.193, + "-Inf" + ] + }, + { + "metric": { + "node": "i-ircdnrao" + }, + "value": [ + 1585658599.193, + "0.05210416666595847" + ] + }, + { + "metric": { + "node": "i-o13skypq" + }, + "value": [ + 1585658599.193, + "0.07756249999996119" + ] + }, + { + "metric": { + "node": "i-tl1i71hr" + }, + "value": [ + 1585658599.193, + "NaN" + ] + }, + { + "metric": { + "node": "i-xfcxdn7z" + }, + "value": [ + 1585658599.193, + "0.06745833333334303" + ] + } + ] + } + }, + { + "metric_name": "node_disk_size_utilisation", + "data": { + "resultType": "vector", + "result": [ + { + "metric": { + "node": "i-2dazc1d6" + }, + "value": [ + 1585658599.193, + "0.42012898861983516" + ] + }, + { + "metric": { + "node": "i-9jtsi522" + }, + "value": [ + 1585658599.193, + "0.2601006025131434" + ] + }, + { + "metric": { + "node": "i-ezjb7gsk" + }, + "value": [ + 1585658599.193, + "0.29849334024542695" + ] + }, + { + "metric": { + "node": "i-hgcoippu" + }, + "value": [ + 1585658599.193, + "0.2588273152865106" + ] + }, + { + "metric": { + "node": "i-ircdnrao" + }, + "value": [ + 1585658599.193, + "0.21351118996831508" + ] + }, + { + "metric": { + "node": "i-o13skypq" + }, + "value": [ + 1585658599.193, + "0.4329682466178235" + ] + }, + { + "metric": { + "node": "i-tl1i71hr" + }, + "value": [ + 1585658599.193, + "0.5286875837861773" + ] + }, + { + "metric": { + "node": "i-xfcxdn7z" + }, + "value": [ + 1585658599.193, + "0.35981263055856705" + ] + } + ] + } + }, + { + "metric_name": "node_memory_utilisation", + "data": { + "resultType": "vector", + "result": [ + { + "metric": { + "node": "i-2dazc1d6" + }, + "value": [ + 1585658599.195, + "0.5286875837861773" + ] + }, + { + "metric": { + "node": "i-9jtsi522" + }, + "value": [ + 1585658599.195, + "0.1446648505469157" + ] + }, + { + "metric": { + "node": "i-ezjb7gsk" + }, + "value": [ + 1585658599.195, + "0.23637090535053928" + ] + }, + { + "metric": { + "node": "i-hgcoippu" + }, + "value": [ + 1585658599.195, + "0.2497060264216553" + ] + }, + { + "metric": { + "node": "i-ircdnrao" + }, + "value": [ + 1585658599.195, + "0.21291125105270192" + ] + }, + { + "metric": { + "node": "i-o13skypq" + }, + "value": [ + 1585658599.195, + "0.823247832787681" + ] + }, + { + "metric": { + "node": "i-tl1i71hr" + }, + "value": [ + 1585658599.195, + "0.5286875837861773" + ] + }, + { + "metric": { + "node": "i-xfcxdn7z" + }, + "value": [ + 1585658599.195, + "0.40309723127991315" + ] + } + ] + } + } + ] +} \ No newline at end of file diff --git a/pkg/models/monitoring/testdata/faulty-node-metrics-paged.json b/pkg/models/monitoring/testdata/faulty-node-metrics-paged.json index ff99f2222..a9c916799 100644 --- a/pkg/models/monitoring/testdata/faulty-node-metrics-paged.json +++ b/pkg/models/monitoring/testdata/faulty-node-metrics-paged.json @@ -15,7 +15,7 @@ }, "value":[ 1585658599.193, - 0.42012898861983516 + "0.42012898861983516" ] }, { @@ -24,7 +24,7 @@ }, "value":[ 1585658599.193, - 0.2588273152865106 + "0.2588273152865106" ] } ] @@ -41,7 +41,7 @@ }, "value":[ 1585658599.195, - 0.5286875837861773 + "0.5286875837861773" ] }, { @@ -50,7 +50,7 @@ }, "value":[ 1585658599.195, - 0.2497060264216553 + "0.2497060264216553" ] } ] diff --git a/pkg/models/monitoring/testdata/faulty-node-metrics-sorted.json b/pkg/models/monitoring/testdata/faulty-node-metrics-sorted-1.json similarity index 85% rename from pkg/models/monitoring/testdata/faulty-node-metrics-sorted.json rename to pkg/models/monitoring/testdata/faulty-node-metrics-sorted-1.json index d5242f67c..9507ba2aa 100644 --- a/pkg/models/monitoring/testdata/faulty-node-metrics-sorted.json +++ b/pkg/models/monitoring/testdata/faulty-node-metrics-sorted-1.json @@ -15,7 +15,7 @@ }, "value":[ 1585658599.193, - 0.42012898861983516 + "0.42012898861983516" ] }, { @@ -24,7 +24,7 @@ }, "value":[ 1585658599.193, - 0.2588273152865106 + "0.2588273152865106" ] }, { @@ -33,7 +33,7 @@ }, "value":[ 1585658599.193, - 0.29849334024542695 + "0.29849334024542695" ] }, { @@ -42,7 +42,7 @@ }, "value":[ 1585658599.193, - 0.2601006025131434 + "0.2601006025131434" ] } ] @@ -59,7 +59,7 @@ }, "value":[ 1585658599.195, - 0.5286875837861773 + "0.5286875837861773" ] }, { @@ -68,7 +68,7 @@ }, "value":[ 1585658599.195, - 0.2497060264216553 + "0.2497060264216553" ] }, { @@ -77,7 +77,7 @@ }, "value":[ 1585658599.195, - 0.23637090535053928 + "0.23637090535053928" ] }, { @@ -86,7 +86,7 @@ }, "value":[ 1585658599.195, - 0.1446648505469157 + "0.1446648505469157" ] } ] diff --git a/pkg/models/monitoring/testdata/faulty-node-metrics-sorted-2.json b/pkg/models/monitoring/testdata/faulty-node-metrics-sorted-2.json new file mode 100644 index 000000000..73cef9a72 --- /dev/null +++ b/pkg/models/monitoring/testdata/faulty-node-metrics-sorted-2.json @@ -0,0 +1,235 @@ +{ + "results":[ + { + "metric_name":"node_cpu_utilisation", + "data":{ + "resultType":"vector", + "result":[ + { + "metric":{ + "node":"i-9jtsi522" + }, + "value":[ + 1585658599.193, + "0.03250000000007276" + ] + }, + { + "metric":{ + "node":"i-hgcoippu" + }, + "value":[ + 1585658599.193, + "0.05066666666655995" + ] + }, + { + "metric":{ + "node":"i-ircdnrao" + }, + "value":[ + 1585658599.193, + "0.05210416666595847" + ] + }, + { + "metric":{ + "node":"i-xfcxdn7z" + }, + "value":[ + 1585658599.193, + "0.06745833333334303" + ] + }, + { + "metric":{ + "node":"i-ezjb7gsk" + }, + "value":[ + 1585658599.193, + "0.07443750000044626" + ] + }, + { + "metric":{ + "node":"i-o13skypq" + }, + "value":[ + 1585658599.193, + "0.07756249999996119" + ] + }, + { + "metric":{ + "node":"i-2dazc1d6" + }, + "value":[ + 1585658599.193, + "0.18095833333306172" + ] + }, + { + "metric":{ + "node":"i-tl1i71hr" + } + } + ] + } + }, + { + "metric_name":"node_disk_size_utilisation", + "data":{ + "resultType":"vector", + "result":[ + { + "metric":{ + "node":"i-9jtsi522" + }, + "value":[ + 1585658599.193, + "0.2601006025131434" + ] + }, + { + "metric":{ + "node":"i-hgcoippu" + }, + "value":[ + 1585658599.193, + "0.2588273152865106" + ] + }, + { + "metric":{ + "node":"i-ircdnrao" + }, + "value":[ + 1585658599.193, + "0.21351118996831508" + ] + }, + { + "metric":{ + "node":"i-xfcxdn7z" + }, + "value":[ + 1585658599.193, + "0.35981263055856705" + ] + }, + { + "metric":{ + "node":"i-ezjb7gsk" + }, + "value":[ + 1585658599.193, + "0.29849334024542695" + ] + }, + { + "metric":{ + "node":"i-o13skypq" + }, + "value":[ + 1585658599.193, + "0.4329682466178235" + ] + }, + { + "metric":{ + "node":"i-2dazc1d6" + }, + "value":[ + 1585658599.193, + "0.42012898861983516" + ] + }, + { + "metric":{ + "node":"i-tl1i71hr" + } + } + ] + } + }, + { + "metric_name":"node_memory_utilisation", + "data":{ + "resultType":"vector", + "result":[ + { + "metric":{ + "node":"i-9jtsi522" + }, + "value":[ + 1585658599.195, + "0.1446648505469157" + ] + }, + { + "metric":{ + "node":"i-hgcoippu" + }, + "value":[ + 1585658599.195, + "0.2497060264216553" + ] + }, + { + "metric":{ + "node":"i-ircdnrao" + }, + "value":[ + 1585658599.195, + "0.21291125105270192" + ] + }, + { + "metric":{ + "node":"i-xfcxdn7z" + }, + "value":[ + 1585658599.195, + "0.40309723127991315" + ] + }, + { + "metric":{ + "node":"i-ezjb7gsk" + }, + "value":[ + 1585658599.195, + "0.23637090535053928" + ] + }, + { + "metric":{ + "node":"i-o13skypq" + }, + "value":[ + 1585658599.195, + "0.823247832787681" + ] + }, + { + "metric":{ + "node":"i-2dazc1d6" + }, + "value":[ + 1585658599.195, + "0.5286875837861773" + ] + }, + { + "metric":{ + "node":"i-tl1i71hr" + } + } + ] + } + } + ], + "page":1, + "total_page":1, + "total_item":8 +} \ No newline at end of file diff --git a/pkg/models/monitoring/testdata/faulty-node-metrics-sorted-3.json b/pkg/models/monitoring/testdata/faulty-node-metrics-sorted-3.json new file mode 100644 index 000000000..10ace4f97 --- /dev/null +++ b/pkg/models/monitoring/testdata/faulty-node-metrics-sorted-3.json @@ -0,0 +1,247 @@ +{ + "results":[ + { + "metric_name":"node_cpu_utilisation", + "data":{ + "resultType":"vector", + "result":[ + { + "metric":{ + "node":"i-hgcoippu" + }, + "value":[ + 1585658599.193, + "-Inf" + ] + }, + { + "metric":{ + "node":"i-ircdnrao" + }, + "value":[ + 1585658599.193, + "0.05210416666595847" + ] + }, + { + "metric":{ + "node":"i-xfcxdn7z" + }, + "value":[ + 1585658599.193, + "0.06745833333334303" + ] + }, + { + "metric":{ + "node":"i-ezjb7gsk" + }, + "value":[ + 1585658599.193, + "0.07443750000044626" + ] + }, + { + "metric":{ + "node":"i-o13skypq" + }, + "value":[ + 1585658599.193, + "0.07756249999996119" + ] + }, + { + "metric":{ + "node":"i-2dazc1d6" + }, + "value":[ + 1585658599.193, + "0.18095833333306172" + ] + }, + { + "metric":{ + "node":"i-9jtsi522" + }, + "value":[ + 1585658599.193, + "+Inf" + ] + }, + { + "metric":{ + "node":"i-tl1i71hr" + }, + "value":[ + 1585658599.193, + "NaN" + ] + } + ] + } + }, + { + "metric_name":"node_disk_size_utilisation", + "data":{ + "resultType":"vector", + "result":[ + { + "metric":{ + "node":"i-hgcoippu" + }, + "value":[ + 1585658599.193, + "0.2588273152865106" + ] + }, + { + "metric":{ + "node":"i-ircdnrao" + }, + "value":[ + 1585658599.193, + "0.21351118996831508" + ] + }, + { + "metric":{ + "node":"i-xfcxdn7z" + }, + "value":[ + 1585658599.193, + "0.35981263055856705" + ] + }, + { + "metric":{ + "node":"i-ezjb7gsk" + }, + "value":[ + 1585658599.193, + "0.29849334024542695" + ] + }, + { + "metric":{ + "node":"i-o13skypq" + }, + "value":[ + 1585658599.193, + "0.4329682466178235" + ] + }, + { + "metric":{ + "node":"i-2dazc1d6" + }, + "value":[ + 1585658599.193, + "0.42012898861983516" + ] + }, + { + "metric":{ + "node":"i-9jtsi522" + }, + "value":[ + 1585658599.193, + "0.2601006025131434" + ] + }, + { + "metric":{ + "node":"i-tl1i71hr" + }, + "value":[ + 1585658599.193, + "0.5286875837861773" + ] + } + ] + } + }, + { + "metric_name":"node_memory_utilisation", + "data":{ + "resultType":"vector", + "result":[ + { + "metric":{ + "node":"i-hgcoippu" + }, + "value":[ + 1585658599.195, + "0.2497060264216553" + ] + }, + { + "metric":{ + "node":"i-ircdnrao" + }, + "value":[ + 1585658599.195, + "0.21291125105270192" + ] + }, + { + "metric":{ + "node":"i-xfcxdn7z" + }, + "value":[ + 1585658599.195, + "0.40309723127991315" + ] + }, + { + "metric":{ + "node":"i-ezjb7gsk" + }, + "value":[ + 1585658599.195, + "0.23637090535053928" + ] + }, + { + "metric":{ + "node":"i-o13skypq" + }, + "value":[ + 1585658599.195, + "0.823247832787681" + ] + }, + { + "metric":{ + "node":"i-2dazc1d6" + }, + "value":[ + 1585658599.195, + "0.5286875837861773" + ] + }, + { + "metric":{ + "node":"i-9jtsi522" + }, + "value":[ + 1585658599.195, + "0.1446648505469157" + ] + }, + { + "metric":{ + "node":"i-tl1i71hr" + }, + "value":[ + 1585658599.195, + "0.5286875837861773" + ] + } + ] + } + } + ], + "page":1, + "total_page":1, + "total_item":8 +} \ No newline at end of file diff --git a/pkg/models/monitoring/testdata/null-node-metrics-sorted.json b/pkg/models/monitoring/testdata/null-node-metrics-sorted.json index 405270145..0570149f6 100644 --- a/pkg/models/monitoring/testdata/null-node-metrics-sorted.json +++ b/pkg/models/monitoring/testdata/null-node-metrics-sorted.json @@ -22,7 +22,7 @@ }, "value": [ 1585658599.195, - 0.5286875837861773 + "0.5286875837861773" ] }, { @@ -31,7 +31,7 @@ }, "value": [ 1585658599.195, - 0.2497060264216553 + "0.2497060264216553" ] }, { @@ -40,7 +40,7 @@ }, "value": [ 1585658599.195, - 0.23637090535053928 + "0.23637090535053928" ] } ] diff --git a/pkg/models/monitoring/testdata/null-node-metrics.json b/pkg/models/monitoring/testdata/null-node-metrics.json index 23f9468f9..774d7f85f 100644 --- a/pkg/models/monitoring/testdata/null-node-metrics.json +++ b/pkg/models/monitoring/testdata/null-node-metrics.json @@ -17,7 +17,7 @@ }, "value": [ 1585658599.195, - 0.5286875837861773 + "0.5286875837861773" ] }, { @@ -26,7 +26,7 @@ }, "value": [ 1585658599.195, - 0.23637090535053928 + "0.23637090535053928" ] }, { @@ -35,7 +35,7 @@ }, "value": [ 1585658599.195, - 0.2497060264216553 + "0.2497060264216553" ] } ] diff --git a/pkg/models/monitoring/testdata/paged-node-metrics-1.json b/pkg/models/monitoring/testdata/paged-node-metrics-1.json index 60cd43507..7665254aa 100644 --- a/pkg/models/monitoring/testdata/paged-node-metrics-1.json +++ b/pkg/models/monitoring/testdata/paged-node-metrics-1.json @@ -11,7 +11,7 @@ }, "value":[ 1585658599.193, - 0.021645833333483702 + "0.021645833333483702" ] }, { @@ -20,7 +20,7 @@ }, "value":[ 1585658599.193, - 0.03250000000007276 + "0.03250000000007276" ] }, { @@ -29,7 +29,7 @@ }, "value":[ 1585658599.193, - 0.05066666666655995 + "0.05066666666655995" ] }, { @@ -38,7 +38,7 @@ }, "value":[ 1585658599.193, - 0.05210416666595847 + "0.05210416666595847" ] }, { @@ -47,7 +47,7 @@ }, "value":[ 1585658599.193, - 0.06745833333334303 + "0.06745833333334303" ] } ] @@ -64,7 +64,7 @@ }, "value":[ 1585658599.193, - 0.3335848564534758 + "0.3335848564534758" ] }, { @@ -73,7 +73,7 @@ }, "value":[ 1585658599.193, - 0.2601006025131434 + "0.2601006025131434" ] }, { @@ -82,7 +82,7 @@ }, "value":[ 1585658599.193, - 0.2588273152865106 + "0.2588273152865106" ] }, { @@ -91,7 +91,7 @@ }, "value":[ 1585658599.193, - 0.21351118996831508 + "0.21351118996831508" ] }, { @@ -100,7 +100,7 @@ }, "value":[ 1585658599.193, - 0.35981263055856705 + "0.35981263055856705" ] } ] @@ -117,7 +117,7 @@ }, "value":[ 1585658599.195, - 0.12824588180084573 + "0.12824588180084573" ] }, { @@ -126,7 +126,7 @@ }, "value":[ 1585658599.195, - 0.1446648505469157 + "0.1446648505469157" ] }, { @@ -135,7 +135,7 @@ }, "value":[ 1585658599.195, - 0.2497060264216553 + "0.2497060264216553" ] }, { @@ -144,7 +144,7 @@ }, "value":[ 1585658599.195, - 0.21291125105270192 + "0.21291125105270192" ] }, { @@ -153,7 +153,7 @@ }, "value":[ 1585658599.195, - 0.40309723127991315 + "0.40309723127991315" ] } ] diff --git a/pkg/models/monitoring/testdata/paged-node-metrics-2.json b/pkg/models/monitoring/testdata/paged-node-metrics-2.json index 097872631..080cf6b3b 100644 --- a/pkg/models/monitoring/testdata/paged-node-metrics-2.json +++ b/pkg/models/monitoring/testdata/paged-node-metrics-2.json @@ -11,7 +11,7 @@ }, "value":[ 1585658599.193, - 0.07443750000044626 + "0.07443750000044626" ] }, { @@ -20,7 +20,7 @@ }, "value":[ 1585658599.193, - 0.07756249999996119 + "0.07756249999996119" ] }, { @@ -29,7 +29,7 @@ }, "value":[ 1585658599.193, - 0.18095833333306172 + "0.18095833333306172" ] } ] @@ -46,7 +46,7 @@ }, "value":[ 1585658599.193, - 0.29849334024542695 + "0.29849334024542695" ] }, { @@ -55,7 +55,7 @@ }, "value":[ 1585658599.193, - 0.4329682466178235 + "0.4329682466178235" ] }, { @@ -64,7 +64,7 @@ }, "value":[ 1585658599.193, - 0.42012898861983516 + "0.42012898861983516" ] } ] @@ -81,7 +81,7 @@ }, "value":[ 1585658599.195, - 0.23637090535053928 + "0.23637090535053928" ] }, { @@ -90,7 +90,7 @@ }, "value":[ 1585658599.195, - 0.823247832787681 + "0.823247832787681" ] }, { @@ -99,7 +99,7 @@ }, "value":[ 1585658599.195, - 0.5286875837861773 + "0.5286875837861773" ] } ] diff --git a/pkg/models/monitoring/testdata/sorted-node-metrics-asc.json b/pkg/models/monitoring/testdata/sorted-node-metrics-asc.json index 909e4a58e..2febdf24c 100644 --- a/pkg/models/monitoring/testdata/sorted-node-metrics-asc.json +++ b/pkg/models/monitoring/testdata/sorted-node-metrics-asc.json @@ -11,7 +11,7 @@ }, "value":[ 1585658599.193, - 0.021645833333483702 + "0.021645833333483702" ] }, { @@ -20,7 +20,7 @@ }, "value":[ 1585658599.193, - 0.03250000000007276 + "0.03250000000007276" ] }, { @@ -29,7 +29,7 @@ }, "value":[ 1585658599.193, - 0.05066666666655995 + "0.05066666666655995" ] }, { @@ -38,7 +38,7 @@ }, "value":[ 1585658599.193, - 0.05210416666595847 + "0.05210416666595847" ] }, { @@ -47,7 +47,7 @@ }, "value":[ 1585658599.193, - 0.06745833333334303 + "0.06745833333334303" ] }, { @@ -56,7 +56,7 @@ }, "value":[ 1585658599.193, - 0.07443750000044626 + "0.07443750000044626" ] }, { @@ -65,7 +65,7 @@ }, "value":[ 1585658599.193, - 0.07756249999996119 + "0.07756249999996119" ] }, { @@ -74,7 +74,7 @@ }, "value":[ 1585658599.193, - 0.18095833333306172 + "0.18095833333306172" ] } ] @@ -91,7 +91,7 @@ }, "value":[ 1585658599.193, - 0.3335848564534758 + "0.3335848564534758" ] }, { @@ -100,7 +100,7 @@ }, "value":[ 1585658599.193, - 0.2601006025131434 + "0.2601006025131434" ] }, { @@ -109,7 +109,7 @@ }, "value":[ 1585658599.193, - 0.2588273152865106 + "0.2588273152865106" ] }, { @@ -118,7 +118,7 @@ }, "value":[ 1585658599.193, - 0.21351118996831508 + "0.21351118996831508" ] }, { @@ -127,7 +127,7 @@ }, "value":[ 1585658599.193, - 0.35981263055856705 + "0.35981263055856705" ] }, { @@ -136,7 +136,7 @@ }, "value":[ 1585658599.193, - 0.29849334024542695 + "0.29849334024542695" ] }, { @@ -145,7 +145,7 @@ }, "value":[ 1585658599.193, - 0.4329682466178235 + "0.4329682466178235" ] }, { @@ -154,7 +154,7 @@ }, "value":[ 1585658599.193, - 0.42012898861983516 + "0.42012898861983516" ] } ] @@ -171,7 +171,7 @@ }, "value":[ 1585658599.195, - 0.12824588180084573 + "0.12824588180084573" ] }, { @@ -180,7 +180,7 @@ }, "value":[ 1585658599.195, - 0.1446648505469157 + "0.1446648505469157" ] }, { @@ -189,7 +189,7 @@ }, "value":[ 1585658599.195, - 0.2497060264216553 + "0.2497060264216553" ] }, { @@ -198,7 +198,7 @@ }, "value":[ 1585658599.195, - 0.21291125105270192 + "0.21291125105270192" ] }, { @@ -207,7 +207,7 @@ }, "value":[ 1585658599.195, - 0.40309723127991315 + "0.40309723127991315" ] }, { @@ -216,7 +216,7 @@ }, "value":[ 1585658599.195, - 0.23637090535053928 + "0.23637090535053928" ] }, { @@ -225,7 +225,7 @@ }, "value":[ 1585658599.195, - 0.823247832787681 + "0.823247832787681" ] }, { @@ -234,7 +234,7 @@ }, "value":[ 1585658599.195, - 0.5286875837861773 + "0.5286875837861773" ] } ] diff --git a/pkg/models/monitoring/testdata/sorted-node-metrics-desc.json b/pkg/models/monitoring/testdata/sorted-node-metrics-desc.json index 4542ee8c5..dea170ddd 100644 --- a/pkg/models/monitoring/testdata/sorted-node-metrics-desc.json +++ b/pkg/models/monitoring/testdata/sorted-node-metrics-desc.json @@ -11,7 +11,7 @@ }, "value":[ 1585658599.193, - 0.07756249999996119 + "0.07756249999996119" ] }, { @@ -20,7 +20,7 @@ }, "value":[ 1585658599.193, - 0.18095833333306172 + "0.18095833333306172" ] }, { @@ -29,7 +29,7 @@ }, "value":[ 1585658599.193, - 0.06745833333334303 + "0.06745833333334303" ] }, { @@ -38,7 +38,7 @@ }, "value":[ 1585658599.193, - 0.05066666666655995 + "0.05066666666655995" ] }, { @@ -47,7 +47,7 @@ }, "value":[ 1585658599.193, - 0.07443750000044626 + "0.07443750000044626" ] }, { @@ -56,7 +56,7 @@ }, "value":[ 1585658599.193, - 0.05210416666595847 + "0.05210416666595847" ] }, { @@ -65,7 +65,7 @@ }, "value":[ 1585658599.193, - 0.03250000000007276 + "0.03250000000007276" ] }, { @@ -74,7 +74,7 @@ }, "value":[ 1585658599.193, - 0.021645833333483702 + "0.021645833333483702" ] } ] @@ -91,7 +91,7 @@ }, "value":[ 1585658599.193, - 0.4329682466178235 + "0.4329682466178235" ] }, { @@ -100,7 +100,7 @@ }, "value":[ 1585658599.193, - 0.42012898861983516 + "0.42012898861983516" ] }, { @@ -109,7 +109,7 @@ }, "value":[ 1585658599.193, - 0.35981263055856705 + "0.35981263055856705" ] }, { @@ -118,7 +118,7 @@ }, "value":[ 1585658599.193, - 0.2588273152865106 + "0.2588273152865106" ] }, { @@ -127,7 +127,7 @@ }, "value":[ 1585658599.193, - 0.29849334024542695 + "0.29849334024542695" ] }, { @@ -136,7 +136,7 @@ }, "value":[ 1585658599.193, - 0.21351118996831508 + "0.21351118996831508" ] }, { @@ -145,7 +145,7 @@ }, "value":[ 1585658599.193, - 0.2601006025131434 + "0.2601006025131434" ] }, { @@ -154,7 +154,7 @@ }, "value":[ 1585658599.193, - 0.3335848564534758 + "0.3335848564534758" ] } ] @@ -171,7 +171,7 @@ }, "value":[ 1585658599.195, - 0.823247832787681 + "0.823247832787681" ] }, { @@ -180,7 +180,7 @@ }, "value":[ 1585658599.195, - 0.5286875837861773 + "0.5286875837861773" ] }, { @@ -189,7 +189,7 @@ }, "value":[ 1585658599.195, - 0.40309723127991315 + "0.40309723127991315" ] }, { @@ -198,7 +198,7 @@ }, "value":[ 1585658599.195, - 0.2497060264216553 + "0.2497060264216553" ] }, { @@ -207,7 +207,7 @@ }, "value":[ 1585658599.195, - 0.23637090535053928 + "0.23637090535053928" ] }, { @@ -216,7 +216,7 @@ }, "value":[ 1585658599.195, - 0.21291125105270192 + "0.21291125105270192" ] }, { @@ -225,7 +225,7 @@ }, "value":[ 1585658599.195, - 0.1446648505469157 + "0.1446648505469157" ] }, { @@ -234,7 +234,7 @@ }, "value":[ 1585658599.195, - 0.12824588180084573 + "0.12824588180084573" ] } ] diff --git a/pkg/models/monitoring/testdata/source-node-metrics.json b/pkg/models/monitoring/testdata/source-node-metrics.json index ad1d3298c..40a6221f7 100644 --- a/pkg/models/monitoring/testdata/source-node-metrics.json +++ b/pkg/models/monitoring/testdata/source-node-metrics.json @@ -11,7 +11,7 @@ }, "value": [ 1585658599.193, - 0.18095833333306172 + "0.18095833333306172" ] }, { @@ -20,7 +20,7 @@ }, "value": [ 1585658599.193, - 0.03250000000007276 + "0.03250000000007276" ] }, { @@ -29,7 +29,7 @@ }, "value": [ 1585658599.193, - 0.07443750000044626 + "0.07443750000044626" ] }, { @@ -38,7 +38,7 @@ }, "value": [ 1585658599.193, - 0.05066666666655995 + "0.05066666666655995" ] }, { @@ -47,7 +47,7 @@ }, "value": [ 1585658599.193, - 0.05210416666595847 + "0.05210416666595847" ] }, { @@ -56,7 +56,7 @@ }, "value": [ 1585658599.193, - 0.07756249999996119 + "0.07756249999996119" ] }, { @@ -65,7 +65,7 @@ }, "value": [ 1585658599.193, - 0.021645833333483702 + "0.021645833333483702" ] }, { @@ -74,7 +74,7 @@ }, "value": [ 1585658599.193, - 0.06745833333334303 + "0.06745833333334303" ] } ] @@ -91,7 +91,7 @@ }, "value": [ 1585658599.193, - 0.42012898861983516 + "0.42012898861983516" ] }, { @@ -100,7 +100,7 @@ }, "value": [ 1585658599.193, - 0.2601006025131434 + "0.2601006025131434" ] }, { @@ -109,7 +109,7 @@ }, "value": [ 1585658599.193, - 0.29849334024542695 + "0.29849334024542695" ] }, { @@ -118,7 +118,7 @@ }, "value": [ 1585658599.193, - 0.2588273152865106 + "0.2588273152865106" ] }, { @@ -127,7 +127,7 @@ }, "value": [ 1585658599.193, - 0.21351118996831508 + "0.21351118996831508" ] }, { @@ -136,7 +136,7 @@ }, "value": [ 1585658599.193, - 0.4329682466178235 + "0.4329682466178235" ] }, { @@ -145,7 +145,7 @@ }, "value": [ 1585658599.193, - 0.3335848564534758 + "0.3335848564534758" ] }, { @@ -154,7 +154,7 @@ }, "value": [ 1585658599.193, - 0.35981263055856705 + "0.35981263055856705" ] } ] @@ -171,7 +171,7 @@ }, "value": [ 1585658599.195, - 0.5286875837861773 + "0.5286875837861773" ] }, { @@ -180,7 +180,7 @@ }, "value": [ 1585658599.195, - 0.1446648505469157 + "0.1446648505469157" ] }, { @@ -189,7 +189,7 @@ }, "value": [ 1585658599.195, - 0.23637090535053928 + "0.23637090535053928" ] }, { @@ -198,7 +198,7 @@ }, "value": [ 1585658599.195, - 0.2497060264216553 + "0.2497060264216553" ] }, { @@ -207,7 +207,7 @@ }, "value": [ 1585658599.195, - 0.21291125105270192 + "0.21291125105270192" ] }, { @@ -216,7 +216,7 @@ }, "value": [ 1585658599.195, - 0.823247832787681 + "0.823247832787681" ] }, { @@ -225,7 +225,7 @@ }, "value": [ 1585658599.195, - 0.12824588180084573 + "0.12824588180084573" ] }, { @@ -234,7 +234,7 @@ }, "value": [ 1585658599.195, - 0.40309723127991315 + "0.40309723127991315" ] } ] diff --git a/pkg/simple/client/monitoring/prometheus/testdata/metrics-matrix-type-res.json b/pkg/simple/client/monitoring/prometheus/testdata/metrics-matrix-type-res.json index 12ac864df..b1a48d91b 100644 --- a/pkg/simple/client/monitoring/prometheus/testdata/metrics-matrix-type-res.json +++ b/pkg/simple/client/monitoring/prometheus/testdata/metrics-matrix-type-res.json @@ -17,23 +17,23 @@ "values":[ [ 1585743925, - 1.123456 + "1.123456" ], [ 1585744045, - 1.123456 + "1.123456" ], [ 1585744165, - 1.123456 + "1.123456" ], [ 1585744285, - 1.123456 + "1.123456" ], [ 1585744405, - 1.123456 + "1.123456" ] ] }, @@ -50,23 +50,23 @@ "values":[ [ 1585743925, - 1.123456 + "1.123456" ], [ 1585744045, - 1.123456 + "1.123456" ], [ 1585744165, - 1.123456 + "1.123456" ], [ 1585744285, - 1.123456 + "1.123456" ], [ 1585744405, - 1.123456 + "1.123456" ] ] }, @@ -83,23 +83,23 @@ "values":[ [ 1585743925, - 1.123456 + "1.123456" ], [ 1585744045, - 1.123456 + "1.123456" ], [ 1585744165, - 1.123456 + "1.123456" ], [ 1585744285, - 1.123456 + "1.123456" ], [ 1585744405, - 1.123456 + "1.123456" ] ] }, @@ -116,23 +116,23 @@ "values":[ [ 1585743925, - 1.123456 + "1.123456" ], [ 1585744045, - 1.123456 + "1.123456" ], [ 1585744165, - 1.123456 + "1.123456" ], [ 1585744285, - 1.123456 + "1.123456" ], [ 1585744405, - 1.123456 + "1.123456" ] ] }, @@ -149,23 +149,23 @@ "values":[ [ 1585743925, - 1.123456 + "1.123456" ], [ 1585744045, - 1.123456 + "1.123456" ], [ 1585744165, - 1.123456 + "1.123456" ], [ 1585744285, - 1.123456 + "1.123456" ], [ 1585744405, - 1.123456 + "1.123456" ] ] }, @@ -182,23 +182,23 @@ "values":[ [ 1585743925, - 1.123456 + "1.123456" ], [ 1585744045, - 1.123456 + "1.123456" ], [ 1585744165, - 1.123456 + "1.123456" ], [ 1585744285, - 1.123456 + "1.123456" ], [ 1585744405, - 1.123456 + "1.123456" ] ] } diff --git a/pkg/simple/client/monitoring/prometheus/testdata/metrics-vector-type-res.json b/pkg/simple/client/monitoring/prometheus/testdata/metrics-vector-type-res.json index ff9e7cdff..019416b65 100644 --- a/pkg/simple/client/monitoring/prometheus/testdata/metrics-vector-type-res.json +++ b/pkg/simple/client/monitoring/prometheus/testdata/metrics-vector-type-res.json @@ -16,7 +16,7 @@ }, "value":[ 1585743854.077, - 1.123456 + "1.123456" ] }, { @@ -31,7 +31,7 @@ }, "value":[ 1585743854.077, - 1.123456 + "1.123456" ] }, { @@ -46,7 +46,7 @@ }, "value":[ 1585743854.077, - 1.123456 + "1.123456" ] }, { @@ -61,7 +61,7 @@ }, "value":[ 1585743854.077, - 1.123456 + "1.123456" ] } ] diff --git a/pkg/simple/client/monitoring/types.go b/pkg/simple/client/monitoring/types.go index 238289427..d893e9c73 100644 --- a/pkg/simple/client/monitoring/types.go +++ b/pkg/simple/client/monitoring/types.go @@ -1,5 +1,12 @@ package monitoring +import ( + "errors" + "fmt" + "github.com/json-iterator/go" + "strconv" +) + const ( MetricTypeMatrix = "matrix" MetricTypeVector = "vector" @@ -22,6 +29,8 @@ type MetricData struct { MetricValues []MetricValue `json:"result,omitempty" description:"metric data including labels, time series and values"` } +// The first element is the timestamp, the second is the metric value. +// eg, [1585658599.195, 0.528] type Point [2]float64 type MetricValue struct { @@ -40,3 +49,50 @@ func (p Point) Timestamp() float64 { func (p Point) Value() float64 { return p[1] } + +// MarshalJSON implements json.Marshaler. It will be called when writing JSON to HTTP response +// Inspired by prometheus/client_golang +func (p Point) MarshalJSON() ([]byte, error) { + t, err := jsoniter.Marshal(p.Timestamp()) + if err != nil { + return nil, err + } + v, err := jsoniter.Marshal(strconv.FormatFloat(p.Value(), 'f', -1, 64)) + if err != nil { + return nil, err + } + return []byte(fmt.Sprintf("[%s,%s]", t, v)), nil +} + +// UnmarshalJSON implements json.Unmarshaler. This is for unmarshaling test data. +func (p *Point) UnmarshalJSON(b []byte) error { + var v []interface{} + if err := jsoniter.Unmarshal(b, &v); err != nil { + return err + } + + if v == nil { + return nil + } + + if len(v) != 2 { + return errors.New("unsupported array length") + } + + ts, ok := v[0].(float64) + if !ok { + return errors.New("failed to unmarshal [timestamp]") + } + valstr, ok := v[1].(string) + if !ok { + return errors.New("failed to unmarshal [value]") + } + valf, err := strconv.ParseFloat(valstr, 64) + if err != nil { + return err + } + + p[0] = ts + p[1] = valf + return nil +}