]> granicus.if.org Git - icinga2/commitdiff
Reschedule services before running checks.
authorGunnar Beutner <gunnar.beutner@netways.de>
Thu, 13 Mar 2014 13:09:52 +0000 (14:09 +0100)
committerGunnar Beutner <gunnar.beutner@netways.de>
Thu, 13 Mar 2014 13:13:55 +0000 (14:13 +0100)
Fixes #5754

components/cluster/clusterchecktask.cpp
components/cluster/clusterchecktask.h
lib/icinga/service-check.cpp

index 4b56d7924bbb01c63fade4d3cca3138a8e19cb99..c6e73e82cac851b49109d6bea51d7e9b7bcbb72e 100644 (file)
@@ -35,7 +35,7 @@ using namespace icinga;
 
 REGISTER_SCRIPTFUNCTION(ClusterCheck, &ClusterCheckTask::ScriptFunc);
 
-CheckResult::Ptr ClusterCheckTask::ScriptFunc(const Service::Ptr&)
+void ClusterCheckTask::ScriptFunc(const Service::Ptr& service, const CheckResult::Ptr& cr)
 {
        /* fetch specific cluster status */
        std::pair<Dictionary::Ptr, Dictionary::Ptr> stats;
@@ -63,13 +63,11 @@ CheckResult::Ptr ClusterCheckTask::ScriptFunc(const Service::Ptr&)
                    " Endpoints (" + not_connected_endpoints + ") not connected.";
        }
 
-       CheckResult::Ptr cr = make_shared<CheckResult>();
        cr->SetOutput(output);
        cr->SetPerformanceData(perfdata);
        cr->SetState(state);
        cr->SetCheckSource(IcingaApplication::GetInstance()->GetNodeName());
-
-       return cr;
+       service->ProcessCheckResult(cr);
 }
 
 String ClusterCheckTask::FormatArray(const Array::Ptr& arr)
index d34ddd3a56a2a3a7bee802876baa735d89fd2f2a..126159a61905ec686422c66f6418648d84c64caf 100644 (file)
@@ -33,7 +33,7 @@ namespace icinga
 class ClusterCheckTask
 {
 public:
-       static CheckResult::Ptr ScriptFunc(const Service::Ptr& service);
+       static void ScriptFunc(const Service::Ptr& service, const CheckResult::Ptr& cr);
 
 private:
        ClusterCheckTask(void);
index 4a2ab06f3889f7fb13015078ac9ae4c9b7fd01d0..5d4679007cd849b4c2c5b3650af1f51d0b0fe5c1 100644 (file)
@@ -489,6 +489,8 @@ void Service::ExecuteCheck(void)
 
        ASSERT(!OwnsLock());
 
+       UpdateNextCheck();
+
        bool reachable = IsReachable();
 
        {
@@ -505,8 +507,6 @@ void Service::ExecuteCheck(void)
                SetLastReachable(reachable);
        }
 
-       UpdateNextCheck();
-
        /* keep track of scheduling info in case the check type doesn't provide its own information */
        double scheduled_start = GetNextCheck();
        double before_check = Utility::GetTime();