Skip to content
Merged
7 changes: 7 additions & 0 deletions x-pack/plugins/infra/server/lib/alerting/common/messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,13 @@ export const groupActionVariableDescription = i18n.translate(
}
);

export const groupByKeysActionVariableDescription = i18n.translate(
'xpack.infra.metrics.alerting.groupByKeysActionVariableDescription',
{
defaultMessage: 'The object containing groups that are reporting data',
}
);

export const alertStateActionVariableDescription = i18n.translate(
'xpack.infra.metrics.alerting.alertStateActionVariableDescription',
{
Expand Down
20 changes: 20 additions & 0 deletions x-pack/plugins/infra/server/lib/alerting/common/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -294,3 +294,23 @@ export const flattenObject = (

return acc;
}, {});

export const getGroupByObject = (
groupBy: string | string[] | undefined,
resultGroupSet: Set<string>
): Record<string, object> => {
const groupByKeysObjectMapping: Record<string, object> = {};
if (groupBy) {
resultGroupSet.forEach((groupSet) => {
const groupSetKeys = groupSet.split(',');
groupByKeysObjectMapping[groupSet] = unflattenObject(
Array.isArray(groupBy)
? groupBy.reduce((result, group, index) => {
return { ...result, [group]: groupSetKeys[index] };
}, {})
: { [groupBy]: groupSet }
);
});
}
return groupByKeysObjectMapping;
};
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import {
hasAdditionalContext,
validGroupByForContext,
flattenAdditionalContext,
getGroupByObject,
} from '../common/utils';

import { EvaluatedRuleParams, evaluateRule } from './lib/evaluate_rule';
Expand Down Expand Up @@ -187,6 +188,7 @@ export const createMetricThresholdExecutor = (libs: InfraBackendLibs) =>
}
}

const groupByKeysObjectMapping = getGroupByObject(params.groupBy, resultGroupSet);
const groups = [...resultGroupSet];
const nextMissingGroups = new Set<MissingGroupsRecord>();
const hasGroups = !isEqual(groups, [UNGROUPED_FACTORY_KEY]);
Expand Down Expand Up @@ -277,6 +279,7 @@ export const createMetricThresholdExecutor = (libs: InfraBackendLibs) =>
alertDetailsUrl: getAlertDetailsUrl(libs.basePath, spaceId, alertUuid),
alertState: stateToAlertMessage[nextState],
group,
groupByKeys: groupByKeysObjectMapping[group],
metric: mapToConditionsLookup(criteria, (c) => c.metric),
reason,
threshold: mapToConditionsLookup(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import {
cloudActionVariableDescription,
containerActionVariableDescription,
groupActionVariableDescription,
groupByKeysActionVariableDescription,
hostActionVariableDescription,
labelsActionVariableDescription,
metricActionVariableDescription,
Expand Down Expand Up @@ -106,6 +107,7 @@ export async function registerMetricThresholdRuleType(
actionVariables: {
context: [
{ name: 'group', description: groupActionVariableDescription },
{ name: 'groupByKeys', description: groupByKeysActionVariableDescription },
...(getAlertDetailsPageEnabledForApp(config, 'metrics')
? [{ name: 'alertDetailsUrl', description: alertDetailUrlActionVariableDescription }]
: []),
Expand Down