void CheckerComponent::ExecuteCheckHelper(const Checkable::Ptr& checkable) { try { checkable->ExecuteCheck(); } catch (const std::exception& ex) { CheckResult::Ptr cr = new CheckResult(); cr->SetState(ServiceUnknown); String output = "Exception occurred while checking '" + checkable->GetName() + "': " + DiagnosticInformation(ex); cr->SetOutput(output); double now = Utility::GetTime(); cr->SetScheduleStart(now); cr->SetScheduleEnd(now); cr->SetExecutionStart(now); cr->SetExecutionEnd(now); checkable->ProcessCheckResult(cr); Log(LogCritical, "checker", output); } Checkable::DecreasePendingChecks(); { boost::mutex::scoped_lock lock(m_Mutex); /* remove the object from the list of pending objects; if it's not in the * list this was a manual (i.e. forced) check and we must not re-add the * object to the list because it's already there. */ auto it = m_PendingCheckables.find(checkable); if (it != m_PendingCheckables.end()) { m_PendingCheckables.erase(it); if (checkable->IsActive()) m_IdleCheckables.insert(GetCheckableScheduleInfo(checkable)); m_CV.notify_all(); } } Log(LogDebug, "CheckerComponent") << "Check finished for object '" << checkable->GetName() << "'"; }