From 1fb920e02d32f30021f342d9a4b54b94006894ef Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Tue, 14 Jun 2022 06:14:26 -0400 Subject: [PATCH] Loki: Handle invalid query type values (#50755) (#50763) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * loki: more robust query-type handling * better comment Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> (cherry picked from commit a97f022612ea30909a479bbf20caf20165a9cb7a) Co-authored-by: Gábor Farkas --- .../app/plugins/datasource/loki/query_utils.test.ts | 12 ++++++++++++ public/app/plugins/datasource/loki/query_utils.ts | 7 ++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/public/app/plugins/datasource/loki/query_utils.test.ts b/public/app/plugins/datasource/loki/query_utils.test.ts index 43cb219f30d..2edac619023 100644 --- a/public/app/plugins/datasource/loki/query_utils.test.ts +++ b/public/app/plugins/datasource/loki/query_utils.test.ts @@ -97,4 +97,16 @@ describe('getNormalizedLokiQuery', () => { it('handles new<>old conflict (new wins), instant', () => { expectNormalized({ instant: true, range: false, queryType: LokiQueryType.Instant }, LokiQueryType.Instant); }); + + it('handles invalid new, range', () => { + expectNormalized({ queryType: 'invalid' }, LokiQueryType.Range); + }); + + it('handles invalid new, when old-range exists, use old', () => { + expectNormalized({ instant: false, range: true, queryType: 'invalid' }, LokiQueryType.Range); + }); + + it('handles invalid new, when old-instant exists, use old', () => { + expectNormalized({ instant: true, range: false, queryType: 'invalid' }, LokiQueryType.Instant); + }); }); diff --git a/public/app/plugins/datasource/loki/query_utils.ts b/public/app/plugins/datasource/loki/query_utils.ts index 1f9ede7022f..d22a04986f7 100644 --- a/public/app/plugins/datasource/loki/query_utils.ts +++ b/public/app/plugins/datasource/loki/query_utils.ts @@ -80,8 +80,13 @@ export function addParsedLabelToQuery(expr: string, key: string, value: string | // - does not have `.instant` // - does not have `.range` export function getNormalizedLokiQuery(query: LokiQuery): LokiQuery { + // if queryType field contains invalid data we behave as if the queryType is empty + const { queryType } = query; + const hasValidQueryType = + queryType === LokiQueryType.Range || queryType === LokiQueryType.Instant || queryType === LokiQueryType.Stream; + // if queryType exists, it is respected - if (query.queryType !== undefined) { + if (hasValidQueryType) { const { instant, range, ...rest } = query; return rest; }