From 5af4bc82b6411faa057150206f0d379d9cb41742 Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Tue, 9 Jun 2020 14:35:40 +0200 Subject: [PATCH] Recognize PENDING -> UNKNOWN as state change ... to get notified about that state change. refs #7807 --- lib/icinga/checkable-check.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/icinga/checkable-check.cpp b/lib/icinga/checkable-check.cpp index 2e96df5af..b50afdefd 100644 --- a/lib/icinga/checkable-check.cpp +++ b/lib/icinga/checkable-check.cpp @@ -231,7 +231,7 @@ Checkable::ProcessingResult Checkable::ProcessCheckResult(const CheckResult::Ptr } /* SOFT state change, increase attempt counter. */ - if (old_stateType == StateTypeSoft && !IsStateOK(old_state)) { + if (old_stateType == StateTypeSoft && old_cr && !IsStateOK(old_state)) { SetStateType(StateTypeSoft); attempt = old_attempt + 1; } @@ -257,11 +257,15 @@ Checkable::ProcessingResult Checkable::ProcessCheckResult(const CheckResult::Ptr bool stateChange; - /* Exception on state change calculation for hosts. */ - if (checkableType == CheckableService) - stateChange = (old_state != new_state); - else - stateChange = (Host::CalculateState(old_state) != Host::CalculateState(new_state)); + if (old_cr) { + /* Exception on state change calculation for hosts. */ + if (checkableType == CheckableService) + stateChange = (old_state != new_state); + else + stateChange = (Host::CalculateState(old_state) != Host::CalculateState(new_state)); + } else { + stateChange = true; + } /* Store the current last state change for the next iteration. */ SetPreviousStateChange(GetLastStateChange()); @@ -281,9 +285,9 @@ Checkable::ProcessingResult Checkable::ProcessCheckResult(const CheckResult::Ptr if (GetAcknowledgement() == AcknowledgementNone) remove_acknowledgement_comments = true; - bool hardChange = (GetStateType() == StateTypeHard && old_stateType == StateTypeSoft); + bool hardChange = (GetStateType() == StateTypeHard && old_stateType == StateTypeSoft && old_cr); - if (stateChange && old_stateType == StateTypeHard && GetStateType() == StateTypeHard) + if (stateChange && (old_stateType == StateTypeHard || !old_cr) && GetStateType() == StateTypeHard) hardChange = true; bool is_volatile = GetVolatile();