]> granicus.if.org Git - icinga2/commitdiff
Log missed checks.
authorGunnar Beutner <gunnar.beutner@netways.de>
Mon, 3 Sep 2012 10:36:35 +0000 (12:36 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Mon, 3 Sep 2012 10:36:35 +0000 (12:36 +0200)
components/checker/checkercomponent.cpp

index 648373735e3708d0145f2f4faf1251a960d90e42..2a60ef5e42d0ca52776b1563d5ea3ce34320bab6 100644 (file)
@@ -58,6 +58,8 @@ void CheckerComponent::CheckTimerHandler(void)
        double now = Utility::GetTime();
        long tasks = 0;
 
+       int missedServices = 0, missedChecks = 0;
+
        while (!m_IdleServices.empty()) {
                typedef nth_index<ServiceSet, 1>::type CheckTimeView;
                CheckTimeView& idx = boost::get<1>(m_IdleServices);
@@ -70,6 +72,18 @@ void CheckerComponent::CheckTimerHandler(void)
 
                idx.erase(it);
 
+               Dictionary::Ptr cr = service->GetLastCheckResult();
+
+               if (cr) {
+                       double lastCheck = cr->Get("execution_end");
+                       int missed = (Utility::GetTime() - lastCheck) / service->GetCheckInterval();
+
+                       if (missed > 0) {
+                               missedChecks += missed;
+                               missedServices++;
+                       }
+               }
+
                Logger::Write(LogDebug, "checker", "Executing service check for '" + service->GetName() + "'");
 
                m_PendingServices.insert(service);
@@ -87,6 +101,12 @@ void CheckerComponent::CheckTimerHandler(void)
 
        Logger::Write(LogDebug, "checker", "CheckTimerHandler: past loop.");
 
+       if (missedServices > 0) {
+               stringstream msgbuf;
+               msgbuf << "Missed " << missedChecks << " checks for " << missedServices << " services";;
+               Logger::Write(LogWarning, "checker", msgbuf.str());
+       }
+
        stringstream msgbuf;
        msgbuf << "CheckTimerHandler: created " << tasks << " tasks";
        Logger::Write(LogInformation, "checker", msgbuf.str());