]> granicus.if.org Git - icinga2/commitdiff
Fix flexible downtimes expiry time and removal
authorMichael Friedrich <michael.friedrich@netways.de>
Wed, 10 Aug 2016 15:14:10 +0000 (17:14 +0200)
committerMichael Friedrich <michael.friedrich@netways.de>
Wed, 10 Aug 2016 15:15:27 +0000 (17:15 +0200)
fixes #12395

lib/icinga/checkable.cpp
lib/icinga/downtime.cpp

index f13ea34e4f5b415da14b45c16019d1ca30a2e89f..73bf6afa31beff2d21ec657f2d0bf50cb72fee45 100644 (file)
@@ -153,6 +153,10 @@ void Checkable::NotifyDowntimeInternal(const Downtime::Ptr& downtime)
 
 void Checkable::NotifyDowntimeEnd(const Downtime::Ptr& downtime)
 {
+       /* don't send notifications for flexible downtimes which never triggered */
+       if (!downtime->GetFixed() && !downtime->IsTriggered())
+               return;
+
        Checkable::Ptr checkable = downtime->GetCheckable();
 
        if (!checkable->IsPaused())
index c903ab5db2ec109ab9995e5a8959b38a14490bbf..a17952672f45567e4a6f3670b859df9c0c6386a3 100644 (file)
@@ -180,7 +180,20 @@ bool Downtime::IsTriggered(void) const
 
 bool Downtime::IsExpired(void) const
 {
-       return (GetEndTime() < Utility::GetTime());
+       double now = Utility::GetTime();
+
+       if (GetFixed())
+               return (GetEndTime() < now);
+       else {
+               /* triggered flexible downtime not in effect anymore */
+               if (IsTriggered() && !IsInEffect())
+                       return true;
+               /* flexible downtime never triggered */
+               else if (!IsTriggered() && (GetEndTime() < now))
+                       return true;
+               else
+                       return false;
+       }
 }
 
 int Downtime::GetNextDowntimeID(void)