]> 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 06:56:12 +0000 (08:56 +0200)
fixes #10348

lib/compat/checkresultreader.cpp

index 3b3cb212750c7ce418ccc1cc70329cb1719a9e40..ba9c4ae86ce3f44a456ac5ae5e12597ce4c6d532 100644 (file)
@@ -71,7 +71,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
@@ -117,6 +117,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) {
@@ -126,15 +128,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"]);
@@ -145,18 +152,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());
 }