Introduce Checkable#NotificationReasonSuppressed()

refs #8509
This commit is contained in:
Alexander A. Klimov 2020-11-27 17:03:34 +01:00
parent b06ea2bef7
commit 5547488cd5
2 changed files with 23 additions and 18 deletions

View File

@ -173,24 +173,7 @@ static void FireSuppressedNotifications(Checkable* checkable)
bool still_applies = checkable->NotificationReasonApplies(type);
if (still_applies) {
bool still_suppressed;
switch (type) {
case NotificationProblem:
/* Fall through. */
case NotificationRecovery:
still_suppressed = !checkable->IsReachable(DependencyNotification) || checkable->IsInDowntime() || checkable->IsAcknowledged();
break;
case NotificationFlappingStart:
/* Fall through. */
case NotificationFlappingEnd:
still_suppressed = checkable->IsInDowntime();
break;
default:
break;
}
if (!still_suppressed && !checkable->IsLikelyToBeCheckedSoon() && !wasLastParentRecoveryRecent.Get()) {
if (!checkable->NotificationReasonSuppressed(type) && !checkable->IsLikelyToBeCheckedSoon() && !wasLastParentRecoveryRecent.Get()) {
Checkable::OnNotificationsRequested(checkable, type, checkable->GetLastCheckResult(), "", "", nullptr);
subtract |= type;
@ -258,6 +241,27 @@ bool Checkable::NotificationReasonApplies(NotificationType type)
}
}
/**
* Returns whether *this not allows sending a notification of type type right now.
*
* @param type The type of notification to send (or not to send).
*
* @return Whether not to send the notification.
*/
bool Checkable::NotificationReasonSuppressed(NotificationType type)
{
switch (type) {
case NotificationProblem:
case NotificationRecovery:
return !IsReachable(DependencyNotification) || IsInDowntime() || IsAcknowledged();
case NotificationFlappingStart:
case NotificationFlappingEnd:
return IsInDowntime();
default:
return false;
}
}
/**
* E.g. we're going to re-send a stashed problem notification as *this is still not ok.
* But if the next check result recovers *this soon, we would send a recovery notification soon after the problem one.

View File

@ -175,6 +175,7 @@ public:
void ValidateMaxCheckAttempts(const Lazy<int>& lvalue, const ValidationUtils& value) final;
bool NotificationReasonApplies(NotificationType type);
bool NotificationReasonSuppressed(NotificationType type);
bool IsLikelyToBeCheckedSoon();
static void IncreasePendingChecks();