mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Alerting: fixes rewiring unrelated reduce and resample expressions (#43174)
This commit is contained in:
parent
acb1f54128
commit
db3cc738d6
@ -156,6 +156,35 @@ describe('rule-editor', () => {
|
||||
expect(rewiredQueries[1]).toEqual(queries[1]);
|
||||
expect(rewiredQueries[2]).toEqual(queries[2]);
|
||||
});
|
||||
|
||||
it('should not rewire non-referencing expressions', () => {
|
||||
const dataSource1 = { ...dataSource, refId: 'Q1' };
|
||||
const dataSource2 = { ...dataSource, refId: 'Q2' };
|
||||
const condition1 = {
|
||||
...classicCondition,
|
||||
refId: 'A',
|
||||
model: {
|
||||
...classicCondition.model,
|
||||
conditions: [
|
||||
{
|
||||
...classicCondition.model.conditions[0],
|
||||
query: { params: ['Q1'] },
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
const condition2 = { ...reduceExpression, refId: 'B', model: { ...reduceExpression.model, expression: 'Q1' } };
|
||||
const condition3 = { ...mathExpression, refId: 'C', model: { ...mathExpression.model, expression: '${Q1}' } };
|
||||
|
||||
const queries: AlertQuery[] = [dataSource1, dataSource2, condition1, condition2, condition3];
|
||||
const rewiredQueries = queriesWithUpdatedReferences(queries, 'Q2', 'Q3');
|
||||
|
||||
expect(rewiredQueries[0]).toEqual(queries[0]);
|
||||
expect(rewiredQueries[1]).toEqual(queries[1]);
|
||||
expect(rewiredQueries[2]).toEqual(queries[2]);
|
||||
expect(rewiredQueries[3]).toEqual(queries[3]);
|
||||
expect(rewiredQueries[4]).toEqual(queries[4]);
|
||||
});
|
||||
});
|
||||
|
||||
describe('updateMathExpressionRefs', () => {
|
||||
@ -165,5 +194,8 @@ describe('rule-editor', () => {
|
||||
it('should rewire refs with brackets', () => {
|
||||
expect(updateMathExpressionRefs('abs(${Foo}) + $Foo', 'Foo', 'Bar')).toBe('abs(${Bar}) + ${Bar}');
|
||||
});
|
||||
it('should not rewire refs with partial variable match', () => {
|
||||
expect(updateMathExpressionRefs('$A3 + $B', 'A', 'C')).toBe('$A3 + $B');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -31,11 +31,13 @@ export function queriesWithUpdatedReferences(
|
||||
}
|
||||
|
||||
if (isResampleExpression || isReduceExpression) {
|
||||
const isReferencing = query.model.expression === previousRefId;
|
||||
|
||||
return {
|
||||
...query,
|
||||
model: {
|
||||
...query.model,
|
||||
expression: newRefId,
|
||||
expression: isReferencing ? newRefId : query.model.expression,
|
||||
},
|
||||
};
|
||||
}
|
||||
@ -57,7 +59,7 @@ export function queriesWithUpdatedReferences(
|
||||
}
|
||||
|
||||
export function updateMathExpressionRefs(expression: string, previousRefId: string, newRefId: string): string {
|
||||
const oldExpression = new RegExp('\\${?' + previousRefId + '}?', 'gm');
|
||||
const oldExpression = new RegExp('(\\$' + previousRefId + '\\b)|(\\${' + previousRefId + '})', 'gm');
|
||||
const newExpression = '${' + newRefId + '}';
|
||||
|
||||
return expression.replace(oldExpression, newExpression);
|
||||
|
Loading…
Reference in New Issue
Block a user