From c65399eaadf391419f725923f299920f8aed57c3 Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Wed, 25 Aug 2021 16:37:22 +0200 Subject: [PATCH] Loki: Fix ad-hoc filter when used with parser (#38542) (#38557) * Fix ad hoc filter when used with parser * Update (cherry picked from commit d1b6132302e6b0618a810cc9ff2d520ef2a1a23d) Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> --- .../app/plugins/datasource/loki/datasource.ts | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/public/app/plugins/datasource/loki/datasource.ts b/public/app/plugins/datasource/loki/datasource.ts index d428bdbdd81..cf0dbbca91d 100644 --- a/public/app/plugins/datasource/loki/datasource.ts +++ b/public/app/plugins/datasource/loki/datasource.ts @@ -412,21 +412,11 @@ export class LokiDatasource extends DataSourceApi { let expression = query.expr ?? ''; switch (action.type) { case 'ADD_FILTER': { - // Temporary fix for log queries that use parser. We don't know which labels are parsed and which are actual labels. - // If query has parser, we treat all labels as parsed and use | key="value" syntax (same in ADD_FILTER_OUT) - if (queryHasPipeParser(expression) && !isMetricsQuery(expression)) { - expression = addParsedLabelToQuery(expression, action.key, action.value, '='); - } else { - expression = addLabelToQuery(expression, action.key, action.value, undefined, true); - } + expression = this.addLabelToQuery(expression, action.key, action.value, '='); break; } case 'ADD_FILTER_OUT': { - if (queryHasPipeParser(expression) && !isMetricsQuery(expression)) { - expression = addParsedLabelToQuery(expression, action.key, action.value, '!='); - } else { - expression = addLabelToQuery(expression, action.key, action.value, '!=', true); - } + expression = this.addLabelToQuery(expression, action.key, action.value, '!='); break; } default: @@ -654,11 +644,21 @@ export class LokiDatasource extends DataSourceApi { if (operator === '=~' || operator === '!~') { value = lokiRegularEscape(value); } - return addLabelToQuery(acc, key, value, operator); + + return this.addLabelToQuery(acc, key, value, operator); }, expr); return expr; } + + addLabelToQuery(queryExpr: string, key: string, value: string | number, operator: string) { + if (queryHasPipeParser(queryExpr) && !isMetricsQuery(queryExpr)) { + // If query has parser, we treat all labels as parsed and use | key="value" syntax + return addParsedLabelToQuery(queryExpr, key, value, operator); + } else { + return addLabelToQuery(queryExpr, key, value, operator, true); + } + } } export function renderTemplate(aliasPattern: string, aliasData: { [key: string]: string }) {