Alerting: adds variable replacement to panel filters (#47962)
This commit is contained in:
@@ -49,13 +49,13 @@ export function UnifiedAlertList(props: PanelProps<UnifiedAlertListOptions>) {
|
|||||||
const rules = useMemo(
|
const rules = useMemo(
|
||||||
() =>
|
() =>
|
||||||
filterRules(
|
filterRules(
|
||||||
props.options,
|
props,
|
||||||
sortRules(
|
sortRules(
|
||||||
props.options.sortOrder,
|
props.options.sortOrder,
|
||||||
Object.values(promRulesRequests).flatMap(({ result = [] }) => flattenRules(result))
|
Object.values(promRulesRequests).flatMap(({ result = [] }) => flattenRules(result))
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
[props.options, promRulesRequests]
|
[props, promRulesRequests]
|
||||||
);
|
);
|
||||||
|
|
||||||
const noAlertsMessage = rules.length ? '' : 'No alerts';
|
const noAlertsMessage = rules.length ? '' : 'No alerts';
|
||||||
@@ -95,7 +95,9 @@ function sortRules(sortOrder: SortOrder, rules: PromRuleWithLocation[]) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function filterRules(options: PanelProps<UnifiedAlertListOptions>['options'], rules: PromRuleWithLocation[]) {
|
function filterRules(props: PanelProps<UnifiedAlertListOptions>, rules: PromRuleWithLocation[]) {
|
||||||
|
const { options, replaceVariables } = props;
|
||||||
|
|
||||||
let filteredRules = [...rules];
|
let filteredRules = [...rules];
|
||||||
if (options.dashboardAlerts) {
|
if (options.dashboardAlerts) {
|
||||||
const dashboardUid = getDashboardSrv().getCurrent()?.uid;
|
const dashboardUid = getDashboardSrv().getCurrent()?.uid;
|
||||||
@@ -104,8 +106,9 @@ function filterRules(options: PanelProps<UnifiedAlertListOptions>['options'], ru
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (options.alertName) {
|
if (options.alertName) {
|
||||||
|
const replacedName = replaceVariables(options.alertName);
|
||||||
filteredRules = filteredRules.filter(({ rule: { name } }) =>
|
filteredRules = filteredRules.filter(({ rule: { name } }) =>
|
||||||
name.toLocaleLowerCase().includes(options.alertName.toLocaleLowerCase())
|
name.toLocaleLowerCase().includes(replacedName.toLocaleLowerCase())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (Object.values(options.stateFilter).some((value) => value)) {
|
if (Object.values(options.stateFilter).some((value) => value)) {
|
||||||
@@ -118,7 +121,8 @@ function filterRules(options: PanelProps<UnifiedAlertListOptions>['options'], ru
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (options.alertInstanceLabelFilter) {
|
if (options.alertInstanceLabelFilter) {
|
||||||
const matchers = parseMatchers(options.alertInstanceLabelFilter);
|
const replacedLabelFilter = replaceVariables(options.alertInstanceLabelFilter);
|
||||||
|
const matchers = parseMatchers(replacedLabelFilter);
|
||||||
// Reduce rules and instances to only those that match
|
// Reduce rules and instances to only those that match
|
||||||
filteredRules = filteredRules.reduce((rules, rule) => {
|
filteredRules = filteredRules.reduce((rules, rule) => {
|
||||||
const filteredAlerts = (rule.rule.alerts ?? []).filter(({ labels }) => labelsMatchMatchers(labels, matchers));
|
const filteredAlerts = (rule.rule.alerts ?? []).filter(({ labels }) => labelsMatchMatchers(labels, matchers));
|
||||||
|
|||||||
Reference in New Issue
Block a user