From d1b6132302e6b0618a810cc9ff2d520ef2a1a23d Mon Sep 17 00:00:00 2001 From: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> Date: Wed, 25 Aug 2021 10:08:41 -0400 Subject: [PATCH] Loki: Fix ad-hoc filter when used with parser (#38542) * Fix ad hoc filter when used with parser * Update --- .../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 c656043fe2a..3f59efb49ea 100644 --- a/public/app/plugins/datasource/loki/datasource.ts +++ b/public/app/plugins/datasource/loki/datasource.ts @@ -416,21 +416,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: @@ -674,11 +664,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 }) {