From 10d8ccc8ffb44a5974b2fb2e7cec644fb9cdddb6 Mon Sep 17 00:00:00 2001 From: Andrej Ocenas Date: Tue, 29 Mar 2022 18:18:43 +0200 Subject: [PATCH] Loki: Return false from isMetricsQuery if query is empty (#47024) --- .../datasource/loki/datasource.test.ts | 19 ++++++++++++++++++- .../app/plugins/datasource/loki/datasource.ts | 3 +++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/public/app/plugins/datasource/loki/datasource.test.ts b/public/app/plugins/datasource/loki/datasource.test.ts index 3d58e7846ee..aca8d9795cc 100644 --- a/public/app/plugins/datasource/loki/datasource.test.ts +++ b/public/app/plugins/datasource/loki/datasource.test.ts @@ -13,7 +13,7 @@ import { toUtc, } from '@grafana/data'; import { BackendSrvRequest, FetchResponse } from '@grafana/runtime'; -import { LokiDatasource, RangeQueryOptions } from './datasource'; +import { isMetricsQuery, LokiDatasource, RangeQueryOptions } from './datasource'; import { LokiQuery, LokiResponse, LokiResultType } from './types'; import { getQueryOptions } from 'test/helpers/getQueryOptions'; import { TemplateSrv } from 'app/features/templating/template_srv'; @@ -1029,6 +1029,23 @@ describe('LokiDatasource', () => { }); }); +describe('isMetricsQuery', () => { + it('should return true for metrics query', () => { + const query = 'rate({label=value}[1m])'; + expect(isMetricsQuery(query)).toBeTruthy(); + }); + + it('should return false for logs query', () => { + const query = '{label=value}'; + expect(isMetricsQuery(query)).toBeFalsy(); + }); + + it('should not blow up on empty query', () => { + const query = ''; + expect(isMetricsQuery(query)).toBeFalsy(); + }); +}); + function assertAdHocFilters(query: string, expectedResults: string, ds: LokiDatasource) { const lokiQuery: LokiQuery = { refId: 'A', expr: query }; const result = ds.addAdHocFilters(lokiQuery.expr); diff --git a/public/app/plugins/datasource/loki/datasource.ts b/public/app/plugins/datasource/loki/datasource.ts index 4b8315b9990..f8439136914 100644 --- a/public/app/plugins/datasource/loki/datasource.ts +++ b/public/app/plugins/datasource/loki/datasource.ts @@ -811,6 +811,9 @@ export function lokiSpecialRegexEscape(value: any) { * Sometimes important to know that before we actually do the query. */ export function isMetricsQuery(query: string): boolean { + if (!query) { + return false; + } const tokens = Prism.tokenize(query, syntax); return tokens.some((t) => { // Not sure in which cases it can be string maybe if nothing matched which means it should not be a function