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
This commit is contained in:
Michael Friedrich 2016-03-11 10:30:50 +01:00 committed by Gunnar Beutner
parent 62dfcc7dc8
commit 122256bb91
3 changed files with 16 additions and 1 deletions

View File

@ -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

View File

@ -197,7 +197,14 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig
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
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;
}

View File

@ -321,6 +321,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")
@ -356,6 +358,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")