Fix support for host checks in CheckResultReader

fixes #10348
This commit is contained in:
Gunnar Beutner 2015-10-13 08:56:12 +02:00
parent e0685356d6
commit ac11653bbe
1 changed files with 21 additions and 19 deletions

View 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"] << "'";
<< "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());
}