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;