diff --git a/cameleer-server-app/src/main/java/com/cameleer/server/app/alerting/eval/AlertStateTransitions.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/alerting/eval/AlertStateTransitions.java index 44453595..1e0297f0 100644 --- a/cameleer-server-app/src/main/java/com/cameleer/server/app/alerting/eval/AlertStateTransitions.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/alerting/eval/AlertStateTransitions.java @@ -2,8 +2,10 @@ package com.cameleer.server.app.alerting.eval; import com.cameleer.server.core.alerting.AlertInstance; import com.cameleer.server.core.alerting.AlertRule; +import com.cameleer.server.core.alerting.AlertRuleTarget; import com.cameleer.server.core.alerting.AlertSeverity; import com.cameleer.server.core.alerting.AlertState; +import com.cameleer.server.core.alerting.TargetKind; import java.time.Instant; import java.util.List; @@ -98,6 +100,20 @@ public final class AlertStateTransitions { * title/message are left empty here; the job enriches them via MustacheRenderer after. */ static AlertInstance newInstance(AlertRule rule, EvalResult.Firing f, AlertState state, Instant now) { + List targets = rule.targets() != null ? rule.targets() : List.of(); + List targetUserIds = targets.stream() + .filter(t -> t.kind() == TargetKind.USER) + .map(AlertRuleTarget::targetId) + .toList(); + List targetGroupIds = targets.stream() + .filter(t -> t.kind() == TargetKind.GROUP) + .map(t -> UUID.fromString(t.targetId())) + .toList(); + List targetRoleNames = targets.stream() + .filter(t -> t.kind() == TargetKind.ROLE) + .map(AlertRuleTarget::targetId) + .toList(); + return new AlertInstance( UUID.randomUUID(), rule.id(), @@ -116,8 +132,8 @@ public final class AlertStateTransitions { f.context() != null ? f.context() : Map.of(), "", // title — rendered by job "", // message — rendered by job - List.of(), - List.of(), - List.of()); + targetUserIds, + targetGroupIds, + targetRoleNames); } }