Notification: Fix incorrectly dropped recovery & ACK notifications

Previously, recovery and ACK notifications were not delivered to users
who weren't notified about the problem state while having a configured
`Problem` type filter. However, since the type filter can also be
configured on the `Notification` object level, this resulted to an
incorrect behaviour. This PR changes the existing logic so that the
recovery and ACK notifications gets dropped only if the `Problem` filter
is configured on both the `User` and `Notification` object levels.
This commit is contained in:
Yonas Habteab 2024-11-08 15:37:18 +01:00
parent 79e5462072
commit d750bff193

View File

@ -428,22 +428,17 @@ void Notification::BeginExecuteNotification(NotificationType type, const CheckRe
continue;
}
/* on recovery, check if user was notified before */
if (type == NotificationRecovery) {
if (!notifiedProblemUsers->Contains(userName) && (NotificationProblem & user->GetTypeFilter())) {
/* on acknowledgement/recovery, check if user was notified before */
if (type == NotificationAcknowledgement || type == NotificationRecovery) {
// Do not notify the user about the ACK/recovery of a problem state that they have not been notified
// about, unless they are explicitly configured to receive ACK/recovery notifications but no problem
// ones, or this Notification instance isn't allowed to send problem notifications (doesn't contain
// the 'Problem' type filter).
if (!notifiedProblemUsers->Contains(userName) && NotificationProblem & user->GetTypeFilter() & GetTypeFilter()) {
Log(LogNotice, "Notification")
<< "Notification object '" << notificationName << "': We did not notify user '" << userName
<< "' (Problem types enabled) for a problem before. Not sending Recovery notification.";
continue;
}
}
/* on acknowledgement, check if user was notified before */
if (type == NotificationAcknowledgement) {
if (!notifiedProblemUsers->Contains(userName) && (NotificationProblem & user->GetTypeFilter())) {
Log(LogNotice, "Notification")
<< "Notification object '" << notificationName << "': We did not notify user '" << userName
<< "' (Problem types enabled) for a problem before. Not sending acknowledgement notification.";
<< "' (Problem types enabled) for a problem before. Not sending "
<< (type == NotificationRecovery ? "Recovery" : "acknowledgement") << " notification.";
continue;
}
}