From 7c4fa22715e32d193f425c22a66cd768eb89001b Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Tue, 13 Oct 2015 08:56:12 +0200 Subject: [PATCH] Fix support for host checks in CheckResultReader fixes #10348 --- lib/compat/checkresultreader.cpp | 40 +++++++++++++++++--------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/lib/compat/checkresultreader.cpp b/lib/compat/checkresultreader.cpp index 3b3cb2127..ba9c4ae86 100644 --- a/lib/compat/checkresultreader.cpp +++ b/lib/compat/checkresultreader.cpp @@ -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"] << "'"; + << "Processed checkresult file for object '" << checkable->GetName() << "'"; - { - ObjectLock olock(service); - - /* 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()); }