mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
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:
@@ -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);
|
||||||
|
|||||||
@@ -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', () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user