{
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
<< boost::errinfo_errno(errno)
<< boost::errinfo_file_name(crfile));
+ Checkable::Ptr checkable;
+
Host::Ptr host = Host::GetByName(attrs["host_name"]);
if (!host) {
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"]);
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());
}