diff --git a/public/app/plugins/datasource/loki/querybuilder/parsing.test.ts b/public/app/plugins/datasource/loki/querybuilder/parsing.test.ts index b123eb2fc7d..64ee292ad82 100644 --- a/public/app/plugins/datasource/loki/querybuilder/parsing.test.ts +++ b/public/app/plugins/datasource/loki/querybuilder/parsing.test.ts @@ -142,6 +142,27 @@ describe('buildVisualQueryFromString', () => { ); }); + it('parses query with with simple unwrap', () => { + expect( + buildVisualQueryFromString('sum_over_time({app="frontend"} | logfmt | unwrap bytes_processed [1m])') + ).toEqual( + noErrors({ + labels: [ + { + op: '=', + value: 'frontend', + label: 'app', + }, + ], + operations: [ + { id: 'logfmt', params: [] }, + { id: 'unwrap', params: ['bytes_processed'] }, + { id: 'sum_over_time', params: ['1m'] }, + ], + }) + ); + }); + it('parses metrics query with function', () => { expect(buildVisualQueryFromString('rate({app="frontend"} | json [5m])')).toEqual( noErrors({ diff --git a/public/app/plugins/datasource/loki/querybuilder/parsing.ts b/public/app/plugins/datasource/loki/querybuilder/parsing.ts index f8b6cd9041b..83d06b09f62 100644 --- a/public/app/plugins/datasource/loki/querybuilder/parsing.ts +++ b/public/app/plugins/datasource/loki/querybuilder/parsing.ts @@ -84,6 +84,11 @@ export function handleExpression(expr: string, node: SyntaxNode, context: Contex break; } + case 'UnwrapExpr': { + visQuery.operations.push(getUnwrap(expr, node)); + break; + } + case 'RangeAggregationExpr': { visQuery.operations.push(handleRangeAggregation(expr, node, context)); break; @@ -241,6 +246,16 @@ function getLabelFormat(expr: string, node: SyntaxNode): QueryBuilderOperation { }; } +function getUnwrap(expr: string, node: SyntaxNode): QueryBuilderOperation { + const id = 'unwrap'; + const string = getString(expr, node.getChild('Identifier')); + + return { + id, + params: [string], + }; +} + function handleRangeAggregation(expr: string, node: SyntaxNode, context: Context) { const nameNode = node.getChild('RangeOp'); const funcName = getString(expr, nameNode);