From f386920e60ed0c9878b2676971f2f14a0fb971d0 Mon Sep 17 00:00:00 2001 From: Michael Friedrich Date: Tue, 15 Mar 2016 09:46:20 +0100 Subject: [PATCH] Refactor patch for host recovery notifications refs #10225 --- lib/icinga/checkable-check.cpp | 32 +++++++++++--------------------- lib/icinga/checkable.hpp | 2 +- lib/icinga/host.cpp | 5 +++++ lib/icinga/host.hpp | 1 + lib/icinga/service.cpp | 5 +++++ lib/icinga/service.hpp | 1 + 6 files changed, 24 insertions(+), 22 deletions(-) diff --git a/lib/icinga/checkable-check.cpp b/lib/icinga/checkable-check.cpp index 3bd5272dc..42dd993f5 100644 --- a/lib/icinga/checkable-check.cpp +++ b/lib/icinga/checkable-check.cpp @@ -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); diff --git a/lib/icinga/checkable.hpp b/lib/icinga/checkable.hpp index 4981cf719..849806420 100644 --- a/lib/icinga/checkable.hpp +++ b/lib/icinga/checkable.hpp @@ -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; diff --git a/lib/icinga/host.cpp b/lib/icinga/host.cpp index 5ea6696d0..5fd2dfc47 100644 --- a/lib/icinga/host.cpp +++ b/lib/icinga/host.cpp @@ -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) diff --git a/lib/icinga/host.hpp b/lib/icinga/host.hpp index 473b2f4af..6622246c8 100644 --- a/lib/icinga/host.hpp +++ b/lib/icinga/host.hpp @@ -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); diff --git a/lib/icinga/service.cpp b/lib/icinga/service.cpp index 05db7f316..a96d6058d 100644 --- a/lib/icinga/service.cpp +++ b/lib/icinga/service.cpp @@ -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) diff --git a/lib/icinga/service.hpp b/lib/icinga/service.hpp index 3588b0948..7b2684c31 100644 --- a/lib/icinga/service.hpp +++ b/lib/icinga/service.hpp @@ -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); -- 2.40.0