Service::CheckCompletedHandler: Convert exceptions to fake check results.

This commit is contained in:
Gunnar Beutner 2013-02-03 16:32:31 +01:00
parent 2834edfd71
commit 745e86de97

View File

@ -697,12 +697,27 @@ void Service::CheckCompletedHandler(const Dictionary::Ptr& scheduleInfo,
scheduleInfo->Set("execution_end", Utility::GetTime());
scheduleInfo->Set("schedule_end", Utility::GetTime());
Dictionary::Ptr result;
try {
Value vresult = task->GetResult();
if (vresult.IsObjectType<Dictionary>()) {
Dictionary::Ptr result = vresult;
if (vresult.IsObjectType<Dictionary>())
result = vresult;
} catch (const exception& ex) {
stringstream msgbuf;
msgbuf << "Exception occured during check for service '"
<< GetName() << "': " << ex.what();
String message = msgbuf.str();
Logger::Write(LogWarning, "checker", message);
result = boost::make_shared<Dictionary>();
result->Set("state", StateUnknown);
result->Set("output", message);
}
if (result) {
if (!result->Contains("schedule_start"))
result->Set("schedule_start", scheduleInfo->Get("schedule_start"));
@ -720,12 +735,6 @@ void Service::CheckCompletedHandler(const Dictionary::Ptr& scheduleInfo,
ProcessCheckResult(result);
}
} catch (const exception& ex) {
stringstream msgbuf;
msgbuf << "Exception occured during check for service '"
<< GetName() << "': " << ex.what();
Logger::Write(LogWarning, "checker", msgbuf.str());
}
/* figure out when the next check is for this service; the call to
* ApplyCheckResult() should've already done this but lets do it again