Browse Source

Merge pull request #14215 from grafana/davkal/fix-logging-selector-parsing

Logging: fix query parsing for selectors with multiple labels
David 7 years ago
parent
commit
8830c133d1

+ 7 - 0
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: '',
+    });
+  });
 });

+ 5 - 16
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 };