From 48a258f51513e8467235a43075781b6a49b063e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Farkas?= Date: Mon, 20 Jun 2022 11:31:36 +0200 Subject: [PATCH] loki: no histogram for instant queries (#50711) --- .../datasource/loki/datasource.test.ts | 11 +++++++- .../app/plugins/datasource/loki/datasource.ts | 28 +++++++++++-------- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/public/app/plugins/datasource/loki/datasource.test.ts b/public/app/plugins/datasource/loki/datasource.test.ts index 4375dbb87f0..743b31b2156 100644 --- a/public/app/plugins/datasource/loki/datasource.test.ts +++ b/public/app/plugins/datasource/loki/datasource.test.ts @@ -24,7 +24,7 @@ import { CustomVariableModel } from '../../../features/variables/types'; import { isMetricsQuery, LokiDatasource } from './datasource'; import { makeMockLokiDatasource } from './mocks'; -import { LokiQuery } from './types'; +import { LokiQuery, LokiQueryType } from './types'; const rawRange = { from: toUtc('2018-04-25 10:00'), @@ -758,6 +758,15 @@ describe('LokiDatasource', () => { expect(ds.getLogsVolumeDataProvider(options)).toBeDefined(); }); + + it('does not create provider if there is only an instant logs query', () => { + const ds = createLokiDSForTests(); + const options = getQueryOptions({ + targets: [{ expr: '{label=value', refId: 'A', queryType: LokiQueryType.Instant }], + }); + + expect(ds.getLogsVolumeDataProvider(options)).not.toBeDefined(); + }); }); describe('importing queries', () => { diff --git a/public/app/plugins/datasource/loki/datasource.ts b/public/app/plugins/datasource/loki/datasource.ts index cd9a1a5d23d..309f96c2a9d 100644 --- a/public/app/plugins/datasource/loki/datasource.ts +++ b/public/app/plugins/datasource/loki/datasource.ts @@ -104,22 +104,28 @@ export class LokiDatasource } getLogsVolumeDataProvider(request: DataQueryRequest): Observable | undefined { - const isLogsVolumeAvailable = request.targets.some((target) => target.expr && !isMetricsQuery(target.expr)); + const isQuerySuitable = (query: LokiQuery) => { + const normalized = getNormalizedLokiQuery(query); + const { expr } = normalized; + // it has to be a logs-producing range-query + return expr && !isMetricsQuery(expr) && normalized.queryType === LokiQueryType.Range; + }; + + const isLogsVolumeAvailable = request.targets.some(isQuerySuitable); + if (!isLogsVolumeAvailable) { return undefined; } const logsVolumeRequest = cloneDeep(request); - logsVolumeRequest.targets = logsVolumeRequest.targets - .filter((target) => target.expr && !isMetricsQuery(target.expr)) - .map((target) => { - return { - ...target, - instant: false, - volumeQuery: true, - expr: `sum by (level) (count_over_time(${target.expr}[$__interval]))`, - }; - }); + logsVolumeRequest.targets = logsVolumeRequest.targets.filter(isQuerySuitable).map((target) => { + return { + ...target, + instant: false, + volumeQuery: true, + expr: `sum by (level) (count_over_time(${target.expr}[$__interval]))`, + }; + }); return queryLogsVolume(this, logsVolumeRequest, { extractLevel,