From 9c316b55e9415d07ec2f937024ce02456c589ec8 Mon Sep 17 00:00:00 2001 From: David Kaltschmidt Date: Wed, 28 Nov 2018 14:03:47 +0100 Subject: [PATCH] Logging: fix query parsing for selectors with multiple labels - simplify selector parsing - added tests --- .../datasource/logging/datasource.test.ts | 7 +++++++ .../plugins/datasource/logging/datasource.ts | 21 +++++-------------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/public/app/plugins/datasource/logging/datasource.test.ts b/public/app/plugins/datasource/logging/datasource.test.ts index 212d352dfca..2e2adb144ef 100644 --- a/public/app/plugins/datasource/logging/datasource.test.ts +++ b/public/app/plugins/datasource/logging/datasource.test.ts @@ -35,4 +35,11 @@ describe('parseQuery', () => { regexp: 'x|y', }); }); + + it('returns query for selector with two labels', () => { + expect(parseQuery('{foo="bar", baz="42"}')).toEqual({ + query: '{foo="bar", baz="42"}', + regexp: '', + }); + }); }); diff --git a/public/app/plugins/datasource/logging/datasource.ts b/public/app/plugins/datasource/logging/datasource.ts index 494dcd78d6c..e36da73cd66 100644 --- a/public/app/plugins/datasource/logging/datasource.ts +++ b/public/app/plugins/datasource/logging/datasource.ts @@ -16,26 +16,15 @@ const DEFAULT_QUERY_PARAMS = { query: '', }; -const QUERY_REGEXP = /({\w+="[^"]+"})?\s*(\w[^{]+)?\s*({\w+="[^"]+"})?/; +const selectorRegexp = /{[^{]*}/g; export function parseQuery(input: string) { - const match = input.match(QUERY_REGEXP); + const match = input.match(selectorRegexp); let query = ''; - let regexp = ''; + let regexp = input; if (match) { - if (match[1]) { - query = match[1]; - } - if (match[2]) { - regexp = match[2].trim(); - } - if (match[3]) { - if (match[1]) { - query = `${match[1].slice(0, -1)},${match[3].slice(1)}`; - } else { - query = match[3]; - } - } + query = match[0]; + regexp = input.replace(selectorRegexp, '').trim(); } return { query, regexp };