diff --git a/lib/compat/checkresultreader.cpp b/lib/compat/checkresultreader.cpp index 4b1e4ad53..58d35c94d 100644 --- a/lib/compat/checkresultreader.cpp +++ b/lib/compat/checkresultreader.cpp @@ -156,9 +156,4 @@ 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 6bfaa41fb..c24ec908e 100644 --- a/lib/icinga/apiactions.cpp +++ b/lib/icinga/apiactions.cpp @@ -106,11 +106,6 @@ 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 0143f6a02..c5dab8e84 100644 --- a/lib/icinga/checkable-check.cpp +++ b/lib/icinga/checkable-check.cpp @@ -311,6 +311,17 @@ 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(); + } + olock.Unlock(); // Log(LogDebug, "Checkable") diff --git a/lib/icinga/externalcommandprocessor.cpp b/lib/icinga/externalcommandprocessor.cpp index 2f79acf08..fa1ff7f0e 100644 --- a/lib/icinga/externalcommandprocessor.cpp +++ b/lib/icinga/externalcommandprocessor.cpp @@ -327,11 +327,6 @@ 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) @@ -362,11 +357,6 @@ 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)