mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Explore: Convert nodes with "*" to regular expressions when a Graphite query is mapped to Loki (#34014)
This commit is contained in:
@@ -12,6 +12,17 @@ const GRAPHITE_TO_LOKI_OPERATOR = {
|
|||||||
'!=~': '!~',
|
'!=~': '!~',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts Graphite glob-like pattern to a regular expression
|
||||||
|
*/
|
||||||
|
function convertGlobToRegEx(text: string): string {
|
||||||
|
if (text.includes('*') || text.includes('{')) {
|
||||||
|
return '^' + text.replace(/\*/g, '.*').replace(/\{/g, '(').replace(/}/g, ')').replace(/,/g, '|');
|
||||||
|
} else {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export default function fromGraphiteQueries(
|
export default function fromGraphiteQueries(
|
||||||
graphiteQueries: GraphiteQuery[],
|
graphiteQueries: GraphiteQuery[],
|
||||||
graphiteDataSource: GraphiteDatasource
|
graphiteDataSource: GraphiteDatasource
|
||||||
@@ -62,17 +73,12 @@ function fromGraphite(graphiteQuery: GraphiteQueryModel, config: GraphiteToLokiQ
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value.includes('{')) {
|
const converted = convertGlobToRegEx(value);
|
||||||
labels[matcher.labelName] = {
|
labels[matcher.labelName] = {
|
||||||
value: value.replace(/\*/g, '.*').replace(/\{/g, '(').replace(/}/g, ')').replace(/,/g, '|'),
|
value: converted,
|
||||||
operator: '=~',
|
operator: converted !== value ? '=~' : '=',
|
||||||
};
|
};
|
||||||
} else {
|
|
||||||
labels[matcher.labelName] = {
|
|
||||||
value: value,
|
|
||||||
operator: '=',
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return targetNodes[index] === matcher.value || matcher.value === '*';
|
return targetNodes[index] === matcher.value || matcher.value === '*';
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ describe('importing from Graphite queries', () => {
|
|||||||
|
|
||||||
beforeEach(() => {});
|
beforeEach(() => {});
|
||||||
|
|
||||||
it('test', () => {
|
it('test matching mappings', () => {
|
||||||
mockSettings(['servers.(cluster).(server).*']);
|
mockSettings(['servers.(cluster).(server).*']);
|
||||||
const lokiQueries = fromGraphiteQueries(
|
const lokiQueries = fromGraphiteQueries(
|
||||||
[
|
[
|
||||||
@@ -45,6 +45,8 @@ describe('importing from Graphite queries', () => {
|
|||||||
// tags: captured
|
// tags: captured
|
||||||
mockGraphiteQuery("interpolate(seriesByTag('cluster=west', 'server=002'), inf))"),
|
mockGraphiteQuery("interpolate(seriesByTag('cluster=west', 'server=002'), inf))"),
|
||||||
mockGraphiteQuery("interpolate(seriesByTag('foo=bar', 'server=002'), inf))"),
|
mockGraphiteQuery("interpolate(seriesByTag('foo=bar', 'server=002'), inf))"),
|
||||||
|
// regexp
|
||||||
|
mockGraphiteQuery('interpolate(alias(servers.eas*.{001,002}.request.POST.200,1,2))'),
|
||||||
// not captured
|
// not captured
|
||||||
mockGraphiteQuery('interpolate(alias(test.west.001.cpu))'),
|
mockGraphiteQuery('interpolate(alias(test.west.001.cpu))'),
|
||||||
mockGraphiteQuery('interpolate(alias(servers.west.001))'),
|
mockGraphiteQuery('interpolate(alias(servers.west.001))'),
|
||||||
@@ -56,8 +58,12 @@ describe('importing from Graphite queries', () => {
|
|||||||
{ refId: 'A', expr: '{cluster="west", server="001"}' },
|
{ refId: 'A', expr: '{cluster="west", server="001"}' },
|
||||||
{ refId: 'A', expr: '{cluster="east", server="001"}' },
|
{ refId: 'A', expr: '{cluster="east", server="001"}' },
|
||||||
{ refId: 'A', expr: '{server="002"}' },
|
{ refId: 'A', expr: '{server="002"}' },
|
||||||
|
|
||||||
{ refId: 'A', expr: '{cluster="west", server="002"}' },
|
{ refId: 'A', expr: '{cluster="west", server="002"}' },
|
||||||
{ refId: 'A', expr: '{foo="bar", server="002"}' },
|
{ refId: 'A', expr: '{foo="bar", server="002"}' },
|
||||||
|
|
||||||
|
{ refId: 'A', expr: '{cluster=~"^eas.*", server=~"^(001|002)"}' },
|
||||||
|
|
||||||
{ refId: 'A', expr: '' },
|
{ refId: 'A', expr: '' },
|
||||||
{ refId: 'A', expr: '' },
|
{ refId: 'A', expr: '' },
|
||||||
]);
|
]);
|
||||||
|
|||||||
Reference in New Issue
Block a user