Fix: Prometheus regex ad-hoc filters w/ wildcards (#16234)

Fixes #14615.

Removes extra escaping for regex filter values when using ad hoc
filters for Prometheus. The extra escaping causes queries with
regex characters to be invalid.
This commit is contained in:
Daniel Lee
2019-03-27 11:43:17 +01:00
committed by GitHub
parent bbdc1e6bd8
commit 8a8a1b8e11
2 changed files with 21 additions and 2 deletions

View File

@@ -215,7 +215,7 @@ export class PrometheusDatasource implements DataSourceApi<PromQuery> {
const { key, operator } = filter; const { key, operator } = filter;
let { value } = filter; let { value } = filter;
if (operator === '=~' || operator === '!~') { if (operator === '=~' || operator === '!~') {
value = prometheusSpecialRegexEscape(value); value = prometheusRegularEscape(value);
} }
return addLabelToQuery(acc, key, value, operator); return addLabelToQuery(acc, key, value, operator);
}, expr); }, expr);

View File

@@ -5,8 +5,8 @@ import {
alignRange, alignRange,
extractRuleMappingFromGroups, extractRuleMappingFromGroups,
PrometheusDatasource, PrometheusDatasource,
prometheusSpecialRegexEscape,
prometheusRegularEscape, prometheusRegularEscape,
prometheusSpecialRegexEscape,
} from '../datasource'; } from '../datasource';
jest.mock('../metric_find_query'); jest.mock('../metric_find_query');
@@ -91,6 +91,25 @@ describe('PrometheusDatasource', () => {
const result = ctx.ds.createQuery(target, { interval: '15s' }); const result = ctx.ds.createQuery(target, { interval: '15s' });
expect(result).toMatchObject({ expr: 'metric{job="foo",k1="v1",k2!="v2"} - metric{k1="v1",k2!="v2"}' }); expect(result).toMatchObject({ expr: 'metric{job="foo",k1="v1",k2!="v2"} - metric{k1="v1",k2!="v2"}' });
}); });
it('should add escaping if needed to regex filter expressions', () => {
ctx.templateSrvMock.getAdhocFilters = () => [
{
key: 'k1',
operator: '=~',
value: 'v.*',
},
{
key: 'k2',
operator: '=~',
value: `v'.*`,
},
];
const result = ctx.ds.createQuery(target, { interval: '15s' });
expect(result).toMatchObject({
expr: `metric{job="foo",k1=~"v.*",k2=~"v\\\\'.*"} - metric{k1=~"v.*",k2=~"v\\\\'.*"}`,
});
});
}); });
describe('When performing performSuggestQuery', () => { describe('When performing performSuggestQuery', () => {