mirror of https://github.com/grafana/grafana
Loki: add from JSON to dataframes tests (#44375)
* Loki: add from JSON to dataframes tests * fixed wrong content-type * added -Inf test-casepull/44467/head^2
parent
ea48d131ee
commit
b42161a713
@ -0,0 +1,138 @@ |
||||
package loki |
||||
|
||||
import ( |
||||
"bytes" |
||||
"io/ioutil" |
||||
"net/http" |
||||
"os" |
||||
"path/filepath" |
||||
"testing" |
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend" |
||||
"github.com/grafana/grafana-plugin-sdk-go/experimental" |
||||
"github.com/grafana/loki/pkg/logcli/client" |
||||
"github.com/stretchr/testify/require" |
||||
) |
||||
|
||||
// NOTE: in these tests there several different json-content-types.
|
||||
// different versions of Loki use different json-content-types.
|
||||
// this is probably not important when we will parse them,
|
||||
// but i wanted to test for all of them, to be sure.
|
||||
|
||||
func TestSuccessResponse(t *testing.T) { |
||||
tt := []struct { |
||||
name string |
||||
filepath string |
||||
}{ |
||||
{name: "parse a simple matrix response", filepath: "matrix_simple"}, |
||||
{name: "parse a matrix response with a time-gap in the middle", filepath: "matrix_gap"}, |
||||
// you can produce NaN by having a metric query and add ` / 0` to the end
|
||||
{name: "parse a matrix response with NaN", filepath: "matrix_nan"}, |
||||
// you can produce Infinity by using `quantile_over_time(42,` (value larger than 1)
|
||||
{name: "parse a matrix response with Infinity", filepath: "matrix_inf"}, |
||||
} |
||||
|
||||
for _, test := range tt { |
||||
t.Run(test.name, func(t *testing.T) { |
||||
responseFileName := filepath.Join("testdata", test.filepath+".json") |
||||
goldenFileName := filepath.Join("testdata", test.filepath+".golden.txt") |
||||
|
||||
bytes, err := os.ReadFile(responseFileName) |
||||
require.NoError(t, err) |
||||
|
||||
frames, err := runQuery(makeMockedClient(200, "application/json", bytes), &lokiQuery{}) |
||||
require.NoError(t, err) |
||||
|
||||
dr := &backend.DataResponse{ |
||||
Frames: frames, |
||||
Error: err, |
||||
} |
||||
|
||||
err = experimental.CheckGoldenDataResponse(goldenFileName, dr, true) |
||||
require.NoError(t, err) |
||||
}) |
||||
} |
||||
} |
||||
|
||||
func TestErrorResponse(t *testing.T) { |
||||
// NOTE: when there is an error-response, it comes with
|
||||
// HTTP code 400, and the format seems to change between versions:
|
||||
// 2.3.x: content-type=text/plain, content is plaintext
|
||||
// 2.4.0: content-type=application/json, content is plaintext !!!
|
||||
// 2.4.1: same as 2.4.0
|
||||
// 2.4.2: same as 2.4.0 (2.4.2 is currently the latest)
|
||||
// main-branch: content-type=application/json, content is JSON
|
||||
// we should always be able to to return some kind of error message
|
||||
//
|
||||
// also, the returned error message is not what we want to return
|
||||
// to the user, but this is what is currently returned to the user,
|
||||
// so the tests check for that. we will have to change this in the future.
|
||||
|
||||
tt := []struct { |
||||
name string |
||||
body []byte |
||||
contentType string |
||||
errorMessage string |
||||
}{ |
||||
{ |
||||
name: "parse an error response in JSON", |
||||
body: []byte(` |
||||
{ |
||||
"status": "error", |
||||
"code": 400, |
||||
"message": "parse error at line 1, col 8: something is wrong" |
||||
}`), |
||||
contentType: "application/json; charset=utf-8", |
||||
errorMessage: "Run out of attempts while querying the server", |
||||
}, |
||||
{ |
||||
name: "parse a non-json error body with json content type (loki 2.4.0,2.4.1,2.4.2)", |
||||
body: []byte("parse error at line 1, col 8: something is wrong"), |
||||
contentType: "application/json; charset=UTF-8", |
||||
errorMessage: "Run out of attempts while querying the server", |
||||
}, |
||||
{ |
||||
name: "parse an error response in plain text", |
||||
body: []byte("parse error at line 1, col 8: something is wrong"), |
||||
contentType: "text/plain; charset=utf-8", |
||||
errorMessage: "Run out of attempts while querying the server", |
||||
}, |
||||
} |
||||
|
||||
for _, test := range tt { |
||||
t.Run(test.name, func(t *testing.T) { |
||||
frames, err := runQuery(makeMockedClient(400, test.contentType, test.body), &lokiQuery{}) |
||||
|
||||
require.Len(t, frames, 0) |
||||
require.Error(t, err) |
||||
require.EqualError(t, err, test.errorMessage) |
||||
}) |
||||
} |
||||
} |
||||
|
||||
type MockedRoundTripper struct { |
||||
statusCode int |
||||
responseBytes []byte |
||||
contentType string |
||||
} |
||||
|
||||
func (mockedRT *MockedRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { |
||||
header := http.Header{} |
||||
header.Add("Content-Type", mockedRT.contentType) |
||||
return &http.Response{ |
||||
StatusCode: mockedRT.statusCode, |
||||
Header: header, |
||||
Body: ioutil.NopCloser(bytes.NewReader(mockedRT.responseBytes)), |
||||
}, nil |
||||
} |
||||
|
||||
func makeMockedClient(statusCode int, contentType string, responseBytes []byte) *client.DefaultClient { |
||||
client := &client.DefaultClient{ |
||||
Address: "http://localhost:9999", |
||||
Tripperware: func(t http.RoundTripper) http.RoundTripper { |
||||
return &MockedRoundTripper{statusCode: statusCode, responseBytes: responseBytes, contentType: contentType} |
||||
}, |
||||
} |
||||
|
||||
return client |
||||
} |
@ -0,0 +1,21 @@ |
||||
🌟 This was machine generated. Do not edit. 🌟 |
||||
|
||||
Frame[0] |
||||
Name: {} |
||||
Dimensions: 2 Fields by 6 Rows |
||||
+-------------------------------+-----------------+ |
||||
| Name: time | Name: value | |
||||
| Labels: | Labels: | |
||||
| Type: []time.Time | Type: []float64 | |
||||
+-------------------------------+-----------------+ |
||||
| 2022-01-24 08:54:13 +0000 UTC | 50 | |
||||
| 2022-01-24 08:59:13 +0000 UTC | 57 | |
||||
| 2022-01-24 09:04:13 +0000 UTC | 55 | |
||||
| 2022-01-24 09:34:13 +0000 UTC | 54 | |
||||
| 2022-01-24 09:39:13 +0000 UTC | 55 | |
||||
| 2022-01-24 09:44:13 +0000 UTC | 56 | |
||||
+-------------------------------+-----------------+ |
||||
|
||||
|
||||
====== TEST DATA RESPONSE (arrow base64) ====== |
||||
FRAME=QVJST1cxAAD/////yAEAABAAAAAAAAoADgAMAAsABAAKAAAAFAAAAAAAAAEEAAoADAAAAAgABAAKAAAACAAAAFAAAAACAAAAKAAAAAQAAADI/v//CAAAAAwAAAAAAAAAAAAAAAUAAAByZWZJZAAAAOj+//8IAAAADAAAAAIAAAB7fQAABAAAAG5hbWUAAAAAAgAAANQAAAAEAAAARv///xQAAACcAAAAnAAAAAAAAAOcAAAAAwAAAFAAAAAsAAAABAAAADz///8IAAAAEAAAAAUAAAB2YWx1ZQAAAAQAAABuYW1lAAAAAGD///8IAAAADAAAAAIAAAB7fQAABgAAAGxhYmVscwAAgP///wgAAAAkAAAAGgAAAHsiZGlzcGxheU5hbWVGcm9tRFMiOiJ7fSJ9AAAGAAAAY29uZmlnAAAAAAAAiv///wAAAgAFAAAAdmFsdWUAEgAYABQAAAATAAwAAAAIAAQAEgAAABQAAABEAAAATAAAAAAAAApMAAAAAQAAAAwAAAAIAAwACAAEAAgAAAAIAAAAEAAAAAQAAAB0aW1lAAAAAAQAAABuYW1lAAAAAAAAAAAAAAYACAAGAAYAAAAAAAMABAAAAHRpbWUAAAAAAAAAAP////+4AAAAFAAAAAAAAAAMABYAFAATAAwABAAMAAAAYAAAAAAAAAAUAAAAAAAAAwQACgAYAAwACAAEAAoAAAAUAAAAWAAAAAYAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAIAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAADS5Z/wKM0WAIpKeTYpzRYAQq9SfCnNFgCSC2sfK80WAEpwRGUrzRYAAtUdqyvNFgAAAAAAAElAAAAAAACATEAAAAAAAIBLQAAAAAAAAEtAAAAAAACAS0AAAAAAAABMQBAAAAAMABQAEgAMAAgABAAMAAAAEAAAACwAAAA4AAAAAAAEAAEAAADYAQAAAAAAAMAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAACgAMAAAACAAEAAoAAAAIAAAAUAAAAAIAAAAoAAAABAAAAMj+//8IAAAADAAAAAAAAAAAAAAABQAAAHJlZklkAAAA6P7//wgAAAAMAAAAAgAAAHt9AAAEAAAAbmFtZQAAAAACAAAA1AAAAAQAAABG////FAAAAJwAAACcAAAAAAAAA5wAAAADAAAAUAAAACwAAAAEAAAAPP///wgAAAAQAAAABQAAAHZhbHVlAAAABAAAAG5hbWUAAAAAYP///wgAAAAMAAAAAgAAAHt9AAAGAAAAbGFiZWxzAACA////CAAAACQAAAAaAAAAeyJkaXNwbGF5TmFtZUZyb21EUyI6Int9In0AAAYAAABjb25maWcAAAAAAACK////AAACAAUAAAB2YWx1ZQASABgAFAAAABMADAAAAAgABAASAAAAFAAAAEQAAABMAAAAAAAACkwAAAABAAAADAAAAAgADAAIAAQACAAAAAgAAAAQAAAABAAAAHRpbWUAAAAABAAAAG5hbWUAAAAAAAAAAAAABgAIAAYABgAAAAAAAwAEAAAAdGltZQAAAADwAQAAQVJST1cx |
@ -0,0 +1,19 @@ |
||||
{ |
||||
"status": "success", |
||||
"data": { |
||||
"resultType": "matrix", |
||||
"result": [ |
||||
{ |
||||
"metric": {}, |
||||
"values": [ |
||||
[1643014453.815, "50"], |
||||
[1643014753.815, "57"], |
||||
[1643015053.815, "55"], |
||||
[1643016853.815, "54"], |
||||
[1643017153.815, "55"], |
||||
[1643017453.815, "56"] |
||||
] |
||||
} |
||||
] |
||||
} |
||||
} |
@ -0,0 +1,17 @@ |
||||
🌟 This was machine generated. Do not edit. 🌟 |
||||
|
||||
Frame[0] |
||||
Name: {level="info", location="moon", protocol="http"} |
||||
Dimensions: 2 Fields by 2 Rows |
||||
+-------------------------------+--------------------------------------------------+ |
||||
| Name: time | Name: value | |
||||
| Labels: | Labels: level=info, location=moon, protocol=http | |
||||
| Type: []time.Time | Type: []float64 | |
||||
+-------------------------------+--------------------------------------------------+ |
||||
| 2022-01-24 10:53:31 +0000 UTC | +Inf | |
||||
| 2022-01-24 10:58:31 +0000 UTC | -Inf | |
||||
+-------------------------------+--------------------------------------------------+ |
||||
|
||||
|
||||
====== TEST DATA RESPONSE (arrow base64) ====== |
||||
FRAME=QVJST1cxAAD/////YAIAABAAAAAAAAoADgAMAAsABAAKAAAAFAAAAAAAAAEEAAoADAAAAAgABAAKAAAACAAAAIAAAAACAAAAKAAAAAQAAAAw/v//CAAAAAwAAAAAAAAAAAAAAAUAAAByZWZJZAAAAFD+//8IAAAAPAAAADAAAAB7bGV2ZWw9ImluZm8iLCBsb2NhdGlvbj0ibW9vbiIsIHByb3RvY29sPSJodHRwIn0AAAAABAAAAG5hbWUAAAAAAgAAADwBAAAEAAAA3v7//xQAAAAEAQAABAEAAAAAAAMEAQAAAwAAAIQAAAAsAAAABAAAANT+//8IAAAAEAAAAAUAAAB2YWx1ZQAAAAQAAABuYW1lAAAAAPj+//8IAAAAQAAAADQAAAB7ImxldmVsIjoiaW5mbyIsImxvY2F0aW9uIjoibW9vbiIsInByb3RvY29sIjoiaHR0cCJ9AAAAAAYAAABsYWJlbHMAAEz///8IAAAAWAAAAE4AAAB7ImRpc3BsYXlOYW1lRnJvbURTIjoie2xldmVsPVwiaW5mb1wiLCBsb2NhdGlvbj1cIm1vb25cIiwgcHJvdG9jb2w9XCJodHRwXCJ9In0AAAYAAABjb25maWcAAAAAAACK////AAACAAUAAAB2YWx1ZQASABgAFAAAABMADAAAAAgABAASAAAAFAAAAEQAAABMAAAAAAAACkwAAAABAAAADAAAAAgADAAIAAQACAAAAAgAAAAQAAAABAAAAHRpbWUAAAAABAAAAG5hbWUAAAAAAAAAAAAABgAIAAYABgAAAAAAAwAEAAAAdGltZQAAAAAAAAAA/////7gAAAAUAAAAAAAAAAwAFgAUABMADAAEAAwAAAAgAAAAAAAAABQAAAAAAAADBAAKABgADAAIAAQACgAAABQAAABYAAAAAgAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAO7xOXMvzRYAplYTuS/NFgAAAAAAAPB/AAAAAAAA8P8QAAAADAAUABIADAAIAAQADAAAABAAAAAsAAAAOAAAAAAABAABAAAAcAIAAAAAAADAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoADAAAAAgABAAKAAAACAAAAIAAAAACAAAAKAAAAAQAAAAw/v//CAAAAAwAAAAAAAAAAAAAAAUAAAByZWZJZAAAAFD+//8IAAAAPAAAADAAAAB7bGV2ZWw9ImluZm8iLCBsb2NhdGlvbj0ibW9vbiIsIHByb3RvY29sPSJodHRwIn0AAAAABAAAAG5hbWUAAAAAAgAAADwBAAAEAAAA3v7//xQAAAAEAQAABAEAAAAAAAMEAQAAAwAAAIQAAAAsAAAABAAAANT+//8IAAAAEAAAAAUAAAB2YWx1ZQAAAAQAAABuYW1lAAAAAPj+//8IAAAAQAAAADQAAAB7ImxldmVsIjoiaW5mbyIsImxvY2F0aW9uIjoibW9vbiIsInByb3RvY29sIjoiaHR0cCJ9AAAAAAYAAABsYWJlbHMAAEz///8IAAAAWAAAAE4AAAB7ImRpc3BsYXlOYW1lRnJvbURTIjoie2xldmVsPVwiaW5mb1wiLCBsb2NhdGlvbj1cIm1vb25cIiwgcHJvdG9jb2w9XCJodHRwXCJ9In0AAAYAAABjb25maWcAAAAAAACK////AAACAAUAAAB2YWx1ZQASABgAFAAAABMADAAAAAgABAASAAAAFAAAAEQAAABMAAAAAAAACkwAAAABAAAADAAAAAgADAAIAAQACAAAAAgAAAAQAAAABAAAAHRpbWUAAAAABAAAAG5hbWUAAAAAAAAAAAAABgAIAAYABgAAAAAAAwAEAAAAdGltZQAAAACIAgAAQVJST1cx |
@ -0,0 +1,19 @@ |
||||
{ |
||||
"status": "success", |
||||
"data": { |
||||
"resultType": "matrix", |
||||
"result": [ |
||||
{ |
||||
"metric": { |
||||
"level": "info", |
||||
"location": "moon", |
||||
"protocol": "http" |
||||
}, |
||||
"values": [ |
||||
[1643021611.9, "+Inf"], |
||||
[1643021911.9, "-Inf"] |
||||
] |
||||
} |
||||
] |
||||
} |
||||
} |
@ -0,0 +1,17 @@ |
||||
🌟 This was machine generated. Do not edit. 🌟 |
||||
|
||||
Frame[0] |
||||
Name: {} |
||||
Dimensions: 2 Fields by 2 Rows |
||||
+-------------------------------+-----------------+ |
||||
| Name: time | Name: value | |
||||
| Labels: | Labels: | |
||||
| Type: []time.Time | Type: []float64 | |
||||
+-------------------------------+-----------------+ |
||||
| 2022-01-24 08:54:10 +0000 UTC | NaN | |
||||
| 2022-01-24 08:59:10 +0000 UTC | NaN | |
||||
+-------------------------------+-----------------+ |
||||
|
||||
|
||||
====== TEST DATA RESPONSE (arrow base64) ====== |
||||
FRAME=QVJST1cxAAD/////yAEAABAAAAAAAAoADgAMAAsABAAKAAAAFAAAAAAAAAEEAAoADAAAAAgABAAKAAAACAAAAFAAAAACAAAAKAAAAAQAAADI/v//CAAAAAwAAAAAAAAAAAAAAAUAAAByZWZJZAAAAOj+//8IAAAADAAAAAIAAAB7fQAABAAAAG5hbWUAAAAAAgAAANQAAAAEAAAARv///xQAAACcAAAAnAAAAAAAAAOcAAAAAwAAAFAAAAAsAAAABAAAADz///8IAAAAEAAAAAUAAAB2YWx1ZQAAAAQAAABuYW1lAAAAAGD///8IAAAADAAAAAIAAAB7fQAABgAAAGxhYmVscwAAgP///wgAAAAkAAAAGgAAAHsiZGlzcGxheU5hbWVGcm9tRFMiOiJ7fSJ9AAAGAAAAY29uZmlnAAAAAAAAiv///wAAAgAFAAAAdmFsdWUAEgAYABQAAAATAAwAAAAIAAQAEgAAABQAAABEAAAATAAAAAAAAApMAAAAAQAAAAwAAAAIAAwACAAEAAgAAAAIAAAAEAAAAAQAAAB0aW1lAAAAAAQAAABuYW1lAAAAAAAAAAAAAAYACAAGAAYAAAAAAAMABAAAAHRpbWUAAAAAAAAAAP////+4AAAAFAAAAAAAAAAMABYAFAATAAwABAAMAAAAIAAAAAAAAAAUAAAAAAAAAwQACgAYAAwACAAEAAoAAAAUAAAAWAAAAAIAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAB0Fe3vKM0WACx6xjUpzRYBAAAAAAD4fwEAAAAAAPh/EAAAAAwAFAASAAwACAAEAAwAAAAQAAAALAAAADgAAAAAAAQAAQAAANgBAAAAAAAAwAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAwAAAAIAAQACgAAAAgAAABQAAAAAgAAACgAAAAEAAAAyP7//wgAAAAMAAAAAAAAAAAAAAAFAAAAcmVmSWQAAADo/v//CAAAAAwAAAACAAAAe30AAAQAAABuYW1lAAAAAAIAAADUAAAABAAAAEb///8UAAAAnAAAAJwAAAAAAAADnAAAAAMAAABQAAAALAAAAAQAAAA8////CAAAABAAAAAFAAAAdmFsdWUAAAAEAAAAbmFtZQAAAABg////CAAAAAwAAAACAAAAe30AAAYAAABsYWJlbHMAAID///8IAAAAJAAAABoAAAB7ImRpc3BsYXlOYW1lRnJvbURTIjoie30ifQAABgAAAGNvbmZpZwAAAAAAAIr///8AAAIABQAAAHZhbHVlABIAGAAUAAAAEwAMAAAACAAEABIAAAAUAAAARAAAAEwAAAAAAAAKTAAAAAEAAAAMAAAACAAMAAgABAAIAAAACAAAABAAAAAEAAAAdGltZQAAAAAEAAAAbmFtZQAAAAAAAAAAAAAGAAgABgAGAAAAAAADAAQAAAB0aW1lAAAAAPABAABBUlJPVzE= |
@ -0,0 +1,15 @@ |
||||
{ |
||||
"status": "success", |
||||
"data": { |
||||
"resultType": "matrix", |
||||
"result": [ |
||||
{ |
||||
"metric": {}, |
||||
"values": [ |
||||
[1643014450.417, "NaN"], |
||||
[1643014750.417, "NaN"] |
||||
] |
||||
} |
||||
] |
||||
} |
||||
} |
@ -0,0 +1,37 @@ |
||||
🌟 This was machine generated. Do not edit. 🌟 |
||||
|
||||
Frame[0] |
||||
Name: {level="error", location="moon"} |
||||
Dimensions: 2 Fields by 4 Rows |
||||
+-------------------------------+------------------------------------+ |
||||
| Name: time | Name: value | |
||||
| Labels: | Labels: level=error, location=moon | |
||||
| Type: []time.Time | Type: []float64 | |
||||
+-------------------------------+------------------------------------+ |
||||
| 2021-12-10 08:36:06 +0000 UTC | 0.4 | |
||||
| 2021-12-10 08:36:46 +0000 UTC | 0.2 | |
||||
| 2021-12-10 08:36:56 +0000 UTC | 0.2 | |
||||
| 2021-12-10 08:37:46 +0000 UTC | 0.6 | |
||||
+-------------------------------+------------------------------------+ |
||||
|
||||
|
||||
|
||||
Frame[1] |
||||
Name: {level="info", location="mars"} |
||||
Dimensions: 2 Fields by 5 Rows |
||||
+-------------------------------+-----------------------------------+ |
||||
| Name: time | Name: value | |
||||
| Labels: | Labels: level=info, location=mars | |
||||
| Type: []time.Time | Type: []float64 | |
||||
+-------------------------------+-----------------------------------+ |
||||
| 2021-12-10 08:36:26 +0000 UTC | 0.6 | |
||||
| 2021-12-10 08:36:36 +0000 UTC | 0.8 | |
||||
| 2021-12-10 08:36:46 +0000 UTC | 0.8 | |
||||
| 2021-12-10 08:36:56 +0000 UTC | 0.8 | |
||||
| 2021-12-10 08:37:56 +0000 UTC | 2.6 | |
||||
+-------------------------------+-----------------------------------+ |
||||
|
||||
|
||||
====== TEST DATA RESPONSE (arrow base64) ====== |
||||
FRAME=QVJST1cxAAD/////KAIAABAAAAAAAAoADgAMAAsABAAKAAAAFAAAAAAAAAEDAAoADAAAAAgABAAKAAAACAAAAHAAAAACAAAAKAAAAAQAAABk/v//CAAAAAwAAAAAAAAAAAAAAAUAAAByZWZJZAAAAIT+//8IAAAALAAAACAAAAB7bGV2ZWw9ImVycm9yIiwgbG9jYXRpb249Im1vb24ifQAAAAAEAAAAbmFtZQAAAAACAAAAGAEAAAQAAAAC////FAAAAOAAAADgAAAAAAAAA+AAAAADAAAAcAAAACwAAAAEAAAA+P7//wgAAAAQAAAABQAAAHZhbHVlAAAABAAAAG5hbWUAAAAAHP///wgAAAAsAAAAIwAAAHsibGV2ZWwiOiJlcnJvciIsImxvY2F0aW9uIjoibW9vbiJ9AAYAAABsYWJlbHMAAFz///8IAAAASAAAADwAAAB7ImRpc3BsYXlOYW1lRnJvbURTIjoie2xldmVsPVwiZXJyb3JcIiwgbG9jYXRpb249XCJtb29uXCJ9In0AAAAABgAAAGNvbmZpZwAAAAAAAIr///8AAAIABQAAAHZhbHVlABIAGAAUAAAAEwAMAAAACAAEABIAAAAUAAAARAAAAEwAAAAAAAAKTAAAAAEAAAAMAAAACAAMAAgABAAIAAAACAAAABAAAAAEAAAAdGltZQAAAAAEAAAAbmFtZQAAAAAAAAAAAAAGAAgABgAGAAAAAAADAAQAAAB0aW1lAAAAAP////+4AAAAFAAAAAAAAAAMABYAFAATAAwABAAMAAAAQAAAAAAAAAAUAAAAAAAAAwMACgAYAAwACAAEAAoAAAAUAAAAWAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAAAAAAAIAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAcw/7VV78WAKzyTt9XvxYAkP6i4Ve/FgAEOkftV78WmpmZmZmZ2T+amZmZmZnJP5qZmZmZmck/MzMzMzMz4z8QAAAADAAUABIADAAIAAQADAAAABAAAAAsAAAAPAAAAAAAAwABAAAAOAIAAAAAAADAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAwAAAAIAAQACgAAAAgAAABwAAAAAgAAACgAAAAEAAAAZP7//wgAAAAMAAAAAAAAAAAAAAAFAAAAcmVmSWQAAACE/v//CAAAACwAAAAgAAAAe2xldmVsPSJlcnJvciIsIGxvY2F0aW9uPSJtb29uIn0AAAAABAAAAG5hbWUAAAAAAgAAABgBAAAEAAAAAv///xQAAADgAAAA4AAAAAAAAAPgAAAAAwAAAHAAAAAsAAAABAAAAPj+//8IAAAAEAAAAAUAAAB2YWx1ZQAAAAQAAABuYW1lAAAAABz///8IAAAALAAAACMAAAB7ImxldmVsIjoiZXJyb3IiLCJsb2NhdGlvbiI6Im1vb24ifQAGAAAAbGFiZWxzAABc////CAAAAEgAAAA8AAAAeyJkaXNwbGF5TmFtZUZyb21EUyI6IntsZXZlbD1cImVycm9yXCIsIGxvY2F0aW9uPVwibW9vblwifSJ9AAAAAAYAAABjb25maWcAAAAAAACK////AAACAAUAAAB2YWx1ZQASABgAFAAAABMADAAAAAgABAASAAAAFAAAAEQAAABMAAAAAAAACkwAAAABAAAADAAAAAgADAAIAAQACAAAAAgAAAAQAAAABAAAAHRpbWUAAAAABAAAAG5hbWUAAAAAAAAAAAAABgAIAAYABgAAAAAAAwAEAAAAdGltZQAAAABYAgAAQVJST1cx |
||||
FRAME=QVJST1cxAAD/////IAIAABAAAAAAAAoADgAMAAsABAAKAAAAFAAAAAAAAAEDAAoADAAAAAgABAAKAAAACAAAAGwAAAACAAAAKAAAAAQAAABs/v//CAAAAAwAAAAAAAAAAAAAAAUAAAByZWZJZAAAAIz+//8IAAAAKAAAAB8AAAB7bGV2ZWw9ImluZm8iLCBsb2NhdGlvbj0ibWFycyJ9AAQAAABuYW1lAAAAAAIAAAAUAQAABAAAAAb///8UAAAA3AAAANwAAAAAAAAD3AAAAAMAAABwAAAALAAAAAQAAAD8/v//CAAAABAAAAAFAAAAdmFsdWUAAAAEAAAAbmFtZQAAAAAg////CAAAACwAAAAiAAAAeyJsZXZlbCI6ImluZm8iLCJsb2NhdGlvbiI6Im1hcnMifQAABgAAAGxhYmVscwAAYP///wgAAABEAAAAOwAAAHsiZGlzcGxheU5hbWVGcm9tRFMiOiJ7bGV2ZWw9XCJpbmZvXCIsIGxvY2F0aW9uPVwibWFyc1wifSJ9AAYAAABjb25maWcAAAAAAACK////AAACAAUAAAB2YWx1ZQASABgAFAAAABMADAAAAAgABAASAAAAFAAAAEQAAABMAAAAAAAACkwAAAABAAAADAAAAAgADAAIAAQACAAAAAgAAAAQAAAABAAAAHRpbWUAAAAABAAAAG5hbWUAAAAAAAAAAAAABgAIAAYABgAAAAAAAwAEAAAAdGltZQAAAAD/////uAAAABQAAAAAAAAADAAWABQAEwAMAAQADAAAAFAAAAAAAAAAFAAAAAAAAAMDAAoAGAAMAAgABAAKAAAAFAAAAFgAAAAFAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAoAAAAAAAAAAAAAAACAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAA5Nqm2le/FgDI5vrcV78WAKzyTt9XvxYAkP6i4Ve/FgDoRZvvV78WMzMzMzMz4z+amZmZmZnpP5qZmZmZmek/mpmZmZmZ6T/NzMzMzMwEQBAAAAAMABQAEgAMAAgABAAMAAAAEAAAACwAAAA8AAAAAAADAAEAAAAwAgAAAAAAAMAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoADAAAAAgABAAKAAAACAAAAGwAAAACAAAAKAAAAAQAAABs/v//CAAAAAwAAAAAAAAAAAAAAAUAAAByZWZJZAAAAIz+//8IAAAAKAAAAB8AAAB7bGV2ZWw9ImluZm8iLCBsb2NhdGlvbj0ibWFycyJ9AAQAAABuYW1lAAAAAAIAAAAUAQAABAAAAAb///8UAAAA3AAAANwAAAAAAAAD3AAAAAMAAABwAAAALAAAAAQAAAD8/v//CAAAABAAAAAFAAAAdmFsdWUAAAAEAAAAbmFtZQAAAAAg////CAAAACwAAAAiAAAAeyJsZXZlbCI6ImluZm8iLCJsb2NhdGlvbiI6Im1hcnMifQAABgAAAGxhYmVscwAAYP///wgAAABEAAAAOwAAAHsiZGlzcGxheU5hbWVGcm9tRFMiOiJ7bGV2ZWw9XCJpbmZvXCIsIGxvY2F0aW9uPVwibWFyc1wifSJ9AAYAAABjb25maWcAAAAAAACK////AAACAAUAAAB2YWx1ZQASABgAFAAAABMADAAAAAgABAASAAAAFAAAAEQAAABMAAAAAAAACkwAAAABAAAADAAAAAgADAAIAAQACAAAAAgAAAAQAAAABAAAAHRpbWUAAAAABAAAAG5hbWUAAAAAAAAAAAAABgAIAAYABgAAAAAAAwAEAAAAdGltZQAAAABQAgAAQVJST1cx |
@ -0,0 +1,33 @@ |
||||
{ |
||||
"status": "success", |
||||
"data": { |
||||
"resultType": "matrix", |
||||
"result": [ |
||||
{ |
||||
"metric": { |
||||
"level": "error", |
||||
"location": "moon" |
||||
}, |
||||
"values": [ |
||||
[1639125366.989, "0.4"], |
||||
[1639125406.989, "0.2"], |
||||
[1639125416.989, "0.2"], |
||||
[1639125466.989, "0.6"] |
||||
] |
||||
}, |
||||
{ |
||||
"metric": { |
||||
"level": "info", |
||||
"location": "mars" |
||||
}, |
||||
"values": [ |
||||
[1639125386.989, "0.6"], |
||||
[1639125396.989, "0.8"], |
||||
[1639125406.989, "0.8"], |
||||
[1639125416.989, "0.8"], |
||||
[1639125476.989, "2.6"] |
||||
] |
||||
} |
||||
] |
||||
} |
||||
} |
Loading…
Reference in new issue