]> granicus.if.org Git - icinga2/commitdiff
Refactor patch for host recovery notifications
authorMichael Friedrich <michael.friedrich@netways.de>
Tue, 15 Mar 2016 08:46:20 +0000 (09:46 +0100)
committerMichael Friedrich <michael.friedrich@netways.de>
Tue, 15 Mar 2016 12:11:01 +0000 (13:11 +0100)
refs #10225

lib/icinga/checkable-check.cpp
lib/icinga/checkable.hpp
lib/icinga/host.cpp
lib/icinga/host.hpp
lib/icinga/service.cpp
lib/icinga/service.hpp

index 3bd5272dc03d3c1e0a76d7c5f7ef430b0f7ea424..42dd993f508a3fa41dade96320364dd691425df2 100644 (file)
@@ -95,16 +95,6 @@ double Checkable::GetLastCheck(void) const
        return schedule_end;
 }
 
-bool Checkable::StateIsOK(CheckableType type, ServiceState state)
-{
-       if (type == CheckableHost && Host::CalculateState(state) == HostUp)
-               return true;
-       else if (type == CheckableService && state == ServiceOK)
-               return true;
-
-       return false;
-}
-
 void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrigin::Ptr& origin)
 {
        {
@@ -184,13 +174,13 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig
 
        if (!old_cr) {
                SetStateType(StateTypeHard);
-       } else if (StateIsOK(checkableType, cr->GetState())) {
-               if (StateIsOK(checkableType, old_state) && old_stateType == StateTypeSoft) {
+       } else if (IsStateOK(cr->GetState())) {
+               if (IsStateOK(old_state) && old_stateType == StateTypeSoft) {
                        SetStateType(StateTypeHard); // SOFT OK -> HARD OK
                        recovery = true;
                }
 
-               if (!StateIsOK(checkableType, old_state))
+               if (!IsStateOK(old_state))
                        recovery = true; // NOT OK -> SOFT/HARD OK
 
                ResetNotificationNumbers();
@@ -202,17 +192,17 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig
        } else {
                if (old_attempt >= GetMaxCheckAttempts()) {
                        SetStateType(StateTypeHard);
-               } else if (old_stateType == StateTypeSoft && !StateIsOK(checkableType, old_state)) {
+               } else if (old_stateType == StateTypeSoft && !IsStateOK(old_state)) {
                        SetStateType(StateTypeSoft);
-                       attempt = old_attempt + 1; //NOT-OK -> NOT-OK counter
-               } else if (StateIsOK(checkableType, old_state)) {
+                       attempt = old_attempt + 1; // NOT-OK -> NOT-OK counter
+               } else if (IsStateOK(old_state)) {
                        SetStateType(StateTypeSoft);
                        attempt = 1; //OK -> NOT-OK transition, reset the counter
                } else {
                        attempt = old_attempt;
                }
 
-               if (!StateIsOK(checkableType, cr->GetState())) {
+               if (!IsStateOK(cr->GetState())) {
                        SaveLastState(cr->GetState(), Utility::GetTime());
                }
 
@@ -242,7 +232,7 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig
 
                /* remove acknowledgements */
                if (GetAcknowledgement() == AcknowledgementNormal ||
-                   (GetAcknowledgement() == AcknowledgementSticky && StateIsOK(checkableType, new_state))) {
+                   (GetAcknowledgement() == AcknowledgementSticky && IsStateOK(new_state))) {
                        ClearAcknowledgement();
                }
 
@@ -273,7 +263,7 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig
                SetLastHardStateChange(now);
        }
 
-       if (!StateIsOK(checkableType, new_state))
+       if (!IsStateOK(new_state))
                TriggerDowntimes();
 
        /* statistics for external tools */
@@ -295,10 +285,10 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig
        if (!old_cr)
                send_notification = false; /* Don't send notifications for the initial state change */
 
-       if (StateIsOK(checkableType, old_state) && old_stateType == StateTypeSoft)
+       if (IsStateOK(old_state) && old_stateType == StateTypeSoft)
                send_notification = false; /* Don't send notifications for SOFT-OK -> HARD-OK. */
 
-       if (is_volatile && StateIsOK(checkableType, old_state) && StateIsOK(checkableType, new_state))
+       if (is_volatile && IsStateOK(old_state) && IsStateOK(new_state))
                send_notification = false; /* Don't send notifications for volatile OK -> OK changes. */
 
        bool send_downtime_notification = (GetLastInDowntime() != in_downtime);
index 4981cf719e53c46c7bf358e8af2ae8b581bdf8cf..84980642087cd6c1e42dc9f9274e3e741a7c707a 100644 (file)
@@ -92,7 +92,7 @@ public:
        void UpdateNextCheck(void);
 
        bool HasBeenChecked(void) const;
-       bool StateIsOK(CheckableType type, ServiceState state);
+       virtual bool IsStateOK(ServiceState state) = 0;
 
        virtual double GetLastCheck(void) const override;
 
index 5ea6696d04186c6e64dc8632d9326d18d260d0d0..5fd2dfc471549e51d0d57f91475787d062c1f826 100644 (file)
@@ -182,6 +182,11 @@ HostState Host::GetLastHardState(void) const
        return CalculateState(GetLastHardStateRaw());
 }
 
+bool Host::IsStateOK(ServiceState state)
+{
+       return Host::CalculateState(state) == HostUp;
+}
+
 void Host::SaveLastState(ServiceState state, double timestamp)
 {
        if (state == ServiceOK || state == ServiceWarning)
index 473b2f4af61f9c6a1020f223621bf87758d2b7c9..6622246c825d228e7f2812196881215b8a016222 100644 (file)
@@ -55,6 +55,7 @@ public:
        virtual HostState GetLastState(void) const override;
        virtual HostState GetLastHardState(void) const override;
 
+       virtual bool IsStateOK(ServiceState state) override;
        virtual void SaveLastState(ServiceState state, double timestamp) override;
 
        static HostState StateFromString(const String& state);
index 05db7f316e8f34ef1c1be79e21acd0212ccf20f8..a96d6058dd576529b37d84b68f0cf5739c81a6a8 100644 (file)
@@ -126,6 +126,11 @@ Host::Ptr Service::GetHost(void) const
        return m_Host;
 }
 
+bool Service::IsStateOK(ServiceState state)
+{
+       return state == ServiceOK;
+}
+
 void Service::SaveLastState(ServiceState state, double timestamp)
 {
        if (state == ServiceOK)
index 3588b094813ef8017aa2563bd6e1060e7d2cd97d..7b2684c31ca17e64b388f7dd9c238dc4a08d0f6a 100644 (file)
@@ -45,6 +45,7 @@ public:
 
        virtual bool ResolveMacro(const String& macro, const CheckResult::Ptr& cr, Value *result) const override;
 
+       virtual bool IsStateOK(ServiceState state) override;
        virtual void SaveLastState(ServiceState state, double timestamp) override;
 
        static ServiceState StateFromString(const String& state);