]> granicus.if.org Git - icinga2/commitdiff
Fix support for host checks in CheckResultReader
authorGunnar Beutner <gunnar@beutner.name>
Tue, 13 Oct 2015 06:56:12 +0000 (08:56 +0200)
committerGunnar Beutner <gunnar@beutner.name>
Tue, 13 Oct 2015 11:09:23 +0000 (13:09 +0200)
fixes #10348

lib/compat/checkresultreader.cpp

index f65ddfc64913ab6a8fe8630d22003d4225248b5a..4f57f978fda1fc0d8c15c248d41e2774b504b110 100644 (file)
@@ -70,7 +70,7 @@ void CheckResultReader::ReadTimerHandler(void) const
 {
        CONTEXT("Processing check result files in '" + GetSpoolDir() + "'");
 
-       Utility::Glob(GetSpoolDir() + "/c??????.ok", boost::bind(&CheckResultReader::ProcessCheckResultFile, this, _1));
+       Utility::Glob(GetSpoolDir() + "/c??????.ok", boost::bind(&CheckResultReader::ProcessCheckResultFile, this, _1), GlobFile);
 }
 
 void CheckResultReader::ProcessCheckResultFile(const String& path) const
@@ -116,6 +116,8 @@ void CheckResultReader::ProcessCheckResultFile(const String& path) const
                    << boost::errinfo_errno(errno)
                    << boost::errinfo_file_name(crfile));
 
+       Checkable::Ptr checkable;
+
        Host::Ptr host = Host::GetByName(attrs["host_name"]);
 
        if (!host) {
@@ -125,15 +127,20 @@ void CheckResultReader::ProcessCheckResultFile(const String& path) const
                return;
        }
 
-       Service::Ptr service = host->GetServiceByShortName(attrs["service_description"]);
+       if (attrs.find("service_description") != attrs.end()) {
+               Service::Ptr service = host->GetServiceByShortName(attrs["service_description"]);
 
-       if (!service) {
-               Log(LogWarning, "CheckResultReader")
-                   << "Ignoring checkresult file for host '" << attrs["host_name"]
-                   << "', service '" << attrs["service_description"] << "': Service does not exist.";
+               if (!service) {
+                       Log(LogWarning, "CheckResultReader")
+                           << "Ignoring checkresult file for host '" << attrs["host_name"]
+                           << "', service '" << attrs["service_description"] << "': Service does not exist.";
 
-               return;
-       }
+                       return;
+               }
+
+               checkable = service;
+       } else
+               checkable = host;
 
        CheckResult::Ptr result = new CheckResult();
        String output = CompatUtility::UnEscapeString(attrs["output"]);
@@ -144,18 +151,13 @@ void CheckResultReader::ProcessCheckResultFile(const String& path) const
        result->SetExecutionStart(Convert::ToDouble(attrs["start_time"]));
        result->SetExecutionEnd(Convert::ToDouble(attrs["finish_time"]));
 
-       service->ProcessCheckResult(result);
+       checkable->ProcessCheckResult(result);
 
        Log(LogDebug, "CheckResultReader")
-           << "Processed checkresult file for host '" << attrs["host_name"]
-           << "', service '" << attrs["service_description"] << "'";
-
-       {
-               ObjectLock olock(service);
+           << "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 service we won't execute any
-                * active checks. */
-               service->SetNextCheck(Utility::GetTime() + service->GetCheckInterval());
-       }
+       /* 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());
 }