]> granicus.if.org Git - icinga2/commitdiff
Use retry_interval on first OK -> NOT-OK state change
authorMichael Friedrich <michael.friedrich@netways.de>
Fri, 11 Mar 2016 09:30:50 +0000 (10:30 +0100)
committerMichael Friedrich <michael.friedrich@netways.de>
Fri, 11 Mar 2016 11:00:30 +0000 (12:00 +0100)
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

lib/icinga/apiactions.cpp
lib/icinga/checkable-check.cpp
lib/icinga/externalcommandprocessor.cpp

index 9faa0304c123dfb9fd567f3207d15b43aac7fbbb..a67121b5328b64fbe20e44ca91bb1c7b2ae22d0a 100644 (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
index 7efd3c91953d514b251371a767aeeb584159a9fd..819de82971f5b41f155982e0cfbacebd77430b11 100644 (file)
@@ -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;
                }
index 5552dd1af865ea53123d2fcba9141c4f4643630b..4fc130820e060bd5f7600ff66a4b1bf218c9e95a 100644 (file)
@@ -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")