diff --git a/pkg/tsdb/azuremonitor/azure-log-analytics-table-frame.go b/pkg/tsdb/azuremonitor/azure-log-analytics-table-frame.go index 27adffcb226..1cd38ae3df2 100644 --- a/pkg/tsdb/azuremonitor/azure-log-analytics-table-frame.go +++ b/pkg/tsdb/azuremonitor/azure-log-analytics-table-frame.go @@ -3,6 +3,7 @@ package azuremonitor import ( "encoding/json" "fmt" + "math" "strconv" "time" @@ -115,7 +116,21 @@ var realConverter = data.FieldConverter{ } jN, ok := v.(json.Number) if !ok { - return nil, fmt.Errorf("unexpected type, expected json.Number but got %T", v) + s, sOk := v.(string) + if sOk { + switch s { + case "Infinity": + f := math.Inf(0) + return &f, nil + case "-Infinity": + f := math.Inf(-1) + return &f, nil + case "NaN": + f := math.NaN() + return &f, nil + } + } + return nil, fmt.Errorf("unexpected type, expected json.Number but got type %T for value %v", v, v) } f, err := jN.Float64() if err != nil { diff --git a/pkg/tsdb/azuremonitor/azure-log-analytics-table-frame_test.go b/pkg/tsdb/azuremonitor/azure-log-analytics-table-frame_test.go index 28dc7cc10de..474d59e2b93 100644 --- a/pkg/tsdb/azuremonitor/azure-log-analytics-table-frame_test.go +++ b/pkg/tsdb/azuremonitor/azure-log-analytics-table-frame_test.go @@ -2,6 +2,7 @@ package azuremonitor import ( "encoding/json" + "math" "os" "path/filepath" "testing" @@ -119,6 +120,21 @@ func TestLogTableToFrame(t *testing.T) { return frame }, }, + { + name: "nan and infinity in real response", + testFile: "loganalytics/8-log-analytics-response-nan-inf.json", + expectedFrame: func() *data.Frame { + frame := data.NewFrame("", + data.NewField("XInf", nil, []*float64{pointer.Float64(math.Inf(0))}), + data.NewField("XInfNeg", nil, []*float64{pointer.Float64(math.Inf(-2))}), + data.NewField("XNan", nil, []*float64{pointer.Float64(math.NaN())}), + ) + frame.Meta = &data.FrameMeta{ + Custom: &LogAnalyticsMeta{ColumnTypes: []string{"real", "real", "real"}}, + } + return frame + }, + }, } for _, tt := range tests { diff --git a/pkg/tsdb/azuremonitor/testdata/loganalytics/8-log-analytics-response-nan-inf.json b/pkg/tsdb/azuremonitor/testdata/loganalytics/8-log-analytics-response-nan-inf.json new file mode 100644 index 00000000000..7bbcdd9a6ac --- /dev/null +++ b/pkg/tsdb/azuremonitor/testdata/loganalytics/8-log-analytics-response-nan-inf.json @@ -0,0 +1,29 @@ +{ + "tables": [ + { + "name": "PrimaryResult", + "columns": [ + { + "name": "XInf", + "type": "real" + }, + { + "name": "XInfNeg", + "type": "real" + }, + { + "name": "XNan", + "type": "real" + } + ], + "rows": [ + [ + "Infinity", + "-Infinity", + "NaN" + ] + ] + } + ] + } + \ No newline at end of file