diff --git a/public/app/plugins/datasource/loki/querybuilder/parsing.test.ts b/public/app/plugins/datasource/loki/querybuilder/parsing.test.ts index 1e7d559fc48..dd4fe45a552 100644 --- a/public/app/plugins/datasource/loki/querybuilder/parsing.test.ts +++ b/public/app/plugins/datasource/loki/querybuilder/parsing.test.ts @@ -673,6 +673,21 @@ describe('buildVisualQueryFromString', () => { ); }); + it('parses quantile queries with grouping', () => { + expect(buildVisualQueryFromString(`quantile_over_time(0.99, {app="frontend"} [1m]) by (host1, host2)`)).toEqual( + noErrors({ + labels: [ + { + op: '=', + value: 'frontend', + label: 'app', + }, + ], + operations: [{ id: LokiOperationId.QuantileOverTime, params: ['1m', '0.99', 'host1', 'host2'] }], + }) + ); + }); + it('parses query with line format', () => { expect(buildVisualQueryFromString('{app="frontend"} | line_format "abc"')).toEqual( noErrors({ diff --git a/public/app/plugins/datasource/loki/querybuilder/parsing.ts b/public/app/plugins/datasource/loki/querybuilder/parsing.ts index 5c0375c0697..45007fff9e8 100644 --- a/public/app/plugins/datasource/loki/querybuilder/parsing.ts +++ b/public/app/plugins/datasource/loki/querybuilder/parsing.ts @@ -501,11 +501,16 @@ function handleRangeAggregation(expr: string, node: SyntaxNode, context: Context const params = number !== null && number !== undefined ? [getString(expr, number)] : []; const range = logExpr?.getChild(Range); const rangeValue = range ? getString(expr, range) : null; + const grouping = node.getChild(Grouping); if (rangeValue) { params.unshift(rangeValue.substring(1, rangeValue.length - 1)); } + if (grouping) { + params.push(...getAllByType(expr, grouping, Identifier)); + } + const op = { id: funcName, params,