From: Michael Friedrich Date: Sat, 5 Mar 2016 16:48:06 +0000 (+0100) Subject: Revert "Properly set the next check time for active and passive checks" X-Git-Tag: v2.5.0~495 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b8e3d61820756066dae5ba9f1e727afdc2d4801c;p=icinga2 Revert "Properly set the next check time for active and passive checks" This reverts commit 2a11b27972e4325bf80e9abc9017eab7dd03e712. This patch does not properly work and breaks the check_interval setting for passive checks. Requires a proper patch. refs #11248 refs #11257 refs #11273 (the old issue) refs #7287 --- diff --git a/lib/compat/checkresultreader.cpp b/lib/compat/checkresultreader.cpp index 58d35c94d..4b1e4ad53 100644 --- a/lib/compat/checkresultreader.cpp +++ b/lib/compat/checkresultreader.cpp @@ -156,4 +156,9 @@ void CheckResultReader::ProcessCheckResultFile(const String& path) const Log(LogDebug, "CheckResultReader") << "Processed checkresult file for object '" << checkable->GetName() << "'"; + + /* Reschedule the next check. The side effect of this is that for as long + * as we receive check result files for a host/service we won't execute any + * active checks. */ + checkable->SetNextCheck(Utility::GetTime() + checkable->GetCheckInterval()); } diff --git a/lib/icinga/apiactions.cpp b/lib/icinga/apiactions.cpp index b4283813b..9faa0304c 100644 --- a/lib/icinga/apiactions.cpp +++ b/lib/icinga/apiactions.cpp @@ -106,6 +106,11 @@ Dictionary::Ptr ApiActions::ProcessCheckResult(const ConfigObject::Ptr& object, cr->SetCommand(params->Get("check_command")); checkable->ProcessCheckResult(cr); + /* Reschedule the next check. The side effect of this is that for as long + * as we receive passive results for a service we won't execute any + * active checks. */ + checkable->SetNextCheck(Utility::GetTime() + checkable->GetCheckInterval()); + return ApiActions::CreateResult(200, "Successfully processed check result for object '" + checkable->GetName() + "'."); } diff --git a/lib/icinga/checkable-check.cpp b/lib/icinga/checkable-check.cpp index ebec15501..9916093de 100644 --- a/lib/icinga/checkable-check.cpp +++ b/lib/icinga/checkable-check.cpp @@ -302,16 +302,8 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig UpdateFlappingStatus(stateChange); is_flapping = IsFlapping(); - /* update next check time for active and passive check results */ - if (!GetEnableActiveChecks() && GetEnablePassiveChecks()) { - /* Reschedule the next passive check. The side effect of this is that for as long - * as we receive passive results for a service we won't execute any - * active checks. */ - SetNextCheck(Utility::GetTime() + GetCheckInterval()); - } else if (GetEnableActiveChecks()) { - /* update next check time based on state changes and types */ - UpdateNextCheck(); - } + /* update next check time on possible state changes */ + UpdateNextCheck(); olock.Unlock(); diff --git a/lib/icinga/externalcommandprocessor.cpp b/lib/icinga/externalcommandprocessor.cpp index 226044e5e..d5eff10a4 100644 --- a/lib/icinga/externalcommandprocessor.cpp +++ b/lib/icinga/externalcommandprocessor.cpp @@ -365,6 +365,11 @@ void ExternalCommandProcessor::ProcessHostCheckResult(double time, const std::ve << "Processing passive check result for host '" << arguments[0] << "'"; host->ProcessCheckResult(result); + + /* Reschedule the next check. The side effect of this is that for as long + * as we receive passive results for a service we won't execute any + * active checks. */ + host->SetNextCheck(Utility::GetTime() + host->GetCheckInterval()); } void ExternalCommandProcessor::ProcessServiceCheckResult(double time, const std::vector& arguments) @@ -395,6 +400,11 @@ void ExternalCommandProcessor::ProcessServiceCheckResult(double time, const std: << "Processing passive check result for service '" << arguments[1] << "'"; service->ProcessCheckResult(result); + + /* Reschedule the next check. The side effect of this is that for as long + * as we receive passive results for a service we won't execute any + * active checks. */ + service->SetNextCheck(Utility::GetTime() + service->GetCheckInterval()); } void ExternalCommandProcessor::ScheduleHostCheck(double, const std::vector& arguments)