From 745e86de9782b5bc29c8b57ca051e16e26e5707e Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Sun, 3 Feb 2013 16:32:31 +0100 Subject: [PATCH] Service::CheckCompletedHandler: Convert exceptions to fake check results. --- lib/icinga/service.cpp | 47 +++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/lib/icinga/service.cpp b/lib/icinga/service.cpp index b1aab631f..1f4c3278d 100644 --- a/lib/icinga/service.cpp +++ b/lib/icinga/service.cpp @@ -697,34 +697,43 @@ 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::Ptr result = vresult; + if (vresult.IsObjectType()) + result = vresult; + } catch (const exception& ex) { + stringstream msgbuf; + msgbuf << "Exception occured during check for service '" + << GetName() << "': " << ex.what(); + String message = msgbuf.str(); - if (!result->Contains("schedule_start")) - result->Set("schedule_start", scheduleInfo->Get("schedule_start")); + Logger::Write(LogWarning, "checker", message); - if (!result->Contains("schedule_end")) - result->Set("schedule_end", scheduleInfo->Get("schedule_end")); + result = boost::make_shared(); + result->Set("state", StateUnknown); + result->Set("output", message); + } - if (!result->Contains("execution_start")) - result->Set("execution_start", scheduleInfo->Get("execution_start")); + if (result) { + if (!result->Contains("schedule_start")) + result->Set("schedule_start", scheduleInfo->Get("schedule_start")); - if (!result->Contains("execution_end")) - result->Set("execution_end", scheduleInfo->Get("execution_end")); + if (!result->Contains("schedule_end")) + result->Set("schedule_end", scheduleInfo->Get("schedule_end")); - if (!result->Contains("active")) - result->Set("active", 1); + if (!result->Contains("execution_start")) + result->Set("execution_start", scheduleInfo->Get("execution_start")); - ProcessCheckResult(result); - } - } catch (const exception& ex) { - stringstream msgbuf; - msgbuf << "Exception occured during check for service '" - << GetName() << "': " << ex.what(); - Logger::Write(LogWarning, "checker", msgbuf.str()); + if (!result->Contains("execution_end")) + result->Set("execution_end", scheduleInfo->Get("execution_end")); + + if (!result->Contains("active")) + result->Set("active", 1); + + ProcessCheckResult(result); } /* figure out when the next check is for this service; the call to -- 2.40.0