Loki: Fix ad-hoc filter when used with parser (#38542) (#38557)

* Fix ad hoc filter when used with parser

* Update

(cherry picked from commit d1b6132302)

Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
This commit is contained in:
Grot (@grafanabot)
2021-08-25 16:37:22 +02:00
committed by GitHub
co-authored by Ivana Huckova
parent bcb405e40c
commit c65399eaad
@@ -412,21 +412,11 @@ export class LokiDatasource extends DataSourceApi<LokiQuery, LokiOptions> {
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<LokiQuery, LokiOptions> {
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 }) {