From: Michael Friedrich Date: Fri, 11 Mar 2016 09:30:50 +0000 (+0100) Subject: Use retry_interval on first OK -> NOT-OK state change X-Git-Tag: v2.5.0~486 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7fb8bcd933b6e4c318398b0e1cdbd3a4bb335f97;p=icinga2 Use retry_interval on first OK -> NOT-OK state change Only valid for active check results. The API actions were missing that marker similar to the external command processor. The initial OK -> NOT-OK transition should use the retry_interval but nothing else. fixes #11336 --- diff --git a/lib/icinga/apiactions.cpp b/lib/icinga/apiactions.cpp index 9faa0304c..a67121b53 100644 --- a/lib/icinga/apiactions.cpp +++ b/lib/icinga/apiactions.cpp @@ -104,6 +104,10 @@ Dictionary::Ptr ApiActions::ProcessCheckResult(const ConfigObject::Ptr& object, cr->SetCheckSource(HttpUtility::GetLastParameter(params, "check_source")); cr->SetPerformanceData(params->Get("performance_data")); cr->SetCommand(params->Get("check_command")); + + /* Mark this check result as passive. */ + cr->SetActive(false); + checkable->ProcessCheckResult(cr); /* Reschedule the next check. The side effect of this is that for as long diff --git a/lib/icinga/checkable-check.cpp b/lib/icinga/checkable-check.cpp index 7efd3c919..819de8297 100644 --- a/lib/icinga/checkable-check.cpp +++ b/lib/icinga/checkable-check.cpp @@ -204,10 +204,17 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig SetStateType(StateTypeHard); } else if (old_stateType == StateTypeSoft && !StateIsOK(checkableType, old_state)) { SetStateType(StateTypeSoft); - attempt = old_attempt + 1; //NOT-OK -> NOT-OK counter + attempt = old_attempt + 1; // NOT-OK -> NOT-OK counter } else if (StateIsOK(checkableType, old_state)) { SetStateType(StateTypeSoft); - attempt = 1; //OK -> NOT-OK transition, reset the counter + attempt = 1; // OK -> NOT-OK transition, reset the counter + + /* If there was a OK -> NOT-OK state change for actively scheduled checks, + * update the next check time using the retry_interval. + * Important: Add the cluster message origin. + */ + if (cr->GetActive()) + SetNextCheck(Utility::GetTime() + GetRetryInterval(), false, origin); } else { attempt = old_attempt; } diff --git a/lib/icinga/externalcommandprocessor.cpp b/lib/icinga/externalcommandprocessor.cpp index 5552dd1af..4fc130820 100644 --- a/lib/icinga/externalcommandprocessor.cpp +++ b/lib/icinga/externalcommandprocessor.cpp @@ -359,6 +359,8 @@ void ExternalCommandProcessor::ProcessHostCheckResult(double time, const std::ve result->SetScheduleEnd(time); result->SetExecutionStart(time); result->SetExecutionEnd(time); + + /* Mark this check result as passive. */ result->SetActive(false); Log(LogNotice, "ExternalCommandProcessor") @@ -394,6 +396,8 @@ void ExternalCommandProcessor::ProcessServiceCheckResult(double time, const std: result->SetScheduleEnd(time); result->SetExecutionStart(time); result->SetExecutionEnd(time); + + /* Mark this check result as passive. */ result->SetActive(false); Log(LogNotice, "ExternalCommandProcessor")