From 59c5f14a5916da2805d0ef82859fcb543295bbdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Farkas?= Date: Fri, 11 Feb 2022 14:28:11 +0100 Subject: [PATCH] loki: handle parsing infinity in loki response (#45097) --- .../datasource/loki/result_transformer.test.ts | 6 ++++++ .../plugins/datasource/loki/result_transformer.ts | 13 ++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/public/app/plugins/datasource/loki/result_transformer.test.ts b/public/app/plugins/datasource/loki/result_transformer.test.ts index d9d0e0b99b8..f0e64b5e8ef 100644 --- a/public/app/plugins/datasource/loki/result_transformer.test.ts +++ b/public/app/plugins/datasource/loki/result_transformer.test.ts @@ -295,6 +295,9 @@ describe('enhanceDataFrame', () => { [1, '1'], [2, '0'], [4, '1'], + [7, 'NaN'], + [8, '+Inf'], + [9, '-Inf'], ]; it('returns data as is if step, start, and end align', () => { @@ -303,6 +306,9 @@ describe('enhanceDataFrame', () => { [1, 1000], [0, 2000], [1, 4000], + [null, 7000], + [Infinity, 8000], + [-Infinity, 9000], ]); }); }); diff --git a/public/app/plugins/datasource/loki/result_transformer.ts b/public/app/plugins/datasource/loki/result_transformer.ts index ae7ef9ce46c..f148331361c 100644 --- a/public/app/plugins/datasource/loki/result_transformer.ts +++ b/public/app/plugins/datasource/loki/result_transformer.ts @@ -192,11 +192,22 @@ function lokiMatrixToTimeSeries(matrixResult: LokiMatrixResult, options: Transfo }; } +function parsePrometheusFormatSampleValue(value: string): number { + switch (value) { + case '+Inf': + return Number.POSITIVE_INFINITY; + case '-Inf': + return Number.NEGATIVE_INFINITY; + default: + return parseFloat(value); + } +} + export function lokiPointsToTimeseriesPoints(data: Array<[number, string]>): TimeSeriesValue[][] { const datapoints: TimeSeriesValue[][] = []; for (const [time, value] of data) { - let datapointValue: TimeSeriesValue = parseFloat(value); + let datapointValue: TimeSeriesValue = parsePrometheusFormatSampleValue(value); if (isNaN(datapointValue)) { datapointValue = null;