From: Gunnar Beutner Date: Wed, 6 Nov 2013 07:36:22 +0000 (+0100) Subject: Implement one-time notification for escalation contacts. X-Git-Tag: v0.0.4~13 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=92c8d71bf37c5561a6a58a918920e75a6f4c1a3d;p=icinga2 Implement one-time notification for escalation contacts. Fixes #5011 --- diff --git a/components/notification/notificationcomponent.cpp b/components/notification/notificationcomponent.cpp index 9d712f34a..f92d690f5 100644 --- a/components/notification/notificationcomponent.cpp +++ b/components/notification/notificationcomponent.cpp @@ -56,15 +56,12 @@ void NotificationComponent::NotificationTimerHandler(void) double now = Utility::GetTime(); BOOST_FOREACH(const Notification::Ptr& notification, DynamicType::GetObjects()) { - if (notification->GetNotificationInterval() <= 0) - continue; + Service::Ptr service = notification->GetService(); - if (notification->GetNextNotification() > now) + if (notification->GetNotificationInterval() <= 0 && notification->GetLastProblemNotification() < service->GetLastHardStateChange()) continue; - Service::Ptr service = notification->GetService(); - - if (!service) + if (notification->GetNextNotification() > now) continue; bool reachable = service->IsReachable(); @@ -107,5 +104,5 @@ void NotificationComponent::NotificationTimerHandler(void) void NotificationComponent::SendNotificationsHandler(const Service::Ptr& service, NotificationType type, const CheckResult::Ptr& cr, const String& author, const String& text) { - service->SendNotifications(static_cast(type), cr, author, text); + service->SendNotifications(type, cr, author, text); } diff --git a/lib/icinga/notification.cpp b/lib/icinga/notification.cpp index f6204ca18..f22efb822 100644 --- a/lib/icinga/notification.cpp +++ b/lib/icinga/notification.cpp @@ -217,7 +217,11 @@ void Notification::BeginExecuteNotification(NotificationType type, const CheckRe { ObjectLock olock(this); - SetLastNotification(Utility::GetTime()); + double now = Utility::GetTime(); + SetLastNotification(now); + + if (type == NotificationProblem) + SetLastProblemNotification(now); } std::set allUsers; diff --git a/lib/icinga/notification.ti b/lib/icinga/notification.ti index d7cf424e9..e6b299b4d 100644 --- a/lib/icinga/notification.ti +++ b/lib/icinga/notification.ti @@ -26,6 +26,7 @@ class Notification : DynamicObject [state] double last_notification; [state, set_protected] double next_notification (NextNotificationRaw); [state, set_protected] Value notification_number; + [state] double last_problem_notification; }; -} \ No newline at end of file +}