From 4c6d2ce618b83305a5d47e9f4951aba69ad0a692 Mon Sep 17 00:00:00 2001 From: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> Date: Mon, 4 Apr 2022 17:44:23 +0100 Subject: [PATCH] Loki: Parse query with unwrap (#47282) * Loki: Parse simple unwrap * Update public/app/plugins/datasource/loki/querybuilder/parsing.ts * Simplify --- .../loki/querybuilder/parsing.test.ts | 21 +++++++++++++++++++ .../datasource/loki/querybuilder/parsing.ts | 15 +++++++++++++ 2 files changed, 36 insertions(+) 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);