mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-24 22:24:44 +02:00
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:
parent
79e5462072
commit
d750bff193
@ -428,22 +428,17 @@ void Notification::BeginExecuteNotification(NotificationType type, const CheckRe
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* on recovery, check if user was notified before */
|
/* on acknowledgement/recovery, check if user was notified before */
|
||||||
if (type == NotificationRecovery) {
|
if (type == NotificationAcknowledgement || type == NotificationRecovery) {
|
||||||
if (!notifiedProblemUsers->Contains(userName) && (NotificationProblem & user->GetTypeFilter())) {
|
// 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")
|
Log(LogNotice, "Notification")
|
||||||
<< "Notification object '" << notificationName << "': We did not notify user '" << userName
|
<< "Notification object '" << notificationName << "': We did not notify user '" << userName
|
||||||
<< "' (Problem types enabled) for a problem before. Not sending Recovery notification.";
|
<< "' (Problem types enabled) for a problem before. Not sending "
|
||||||
continue;
|
<< (type == NotificationRecovery ? "Recovery" : "acknowledgement") << " notification.";
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 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.";
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user