]> granicus.if.org Git - icinga2/commitdiff
Service::CheckCompletedHandler: Convert exceptions to fake check results.
authorGunnar Beutner <gunnar.beutner@netways.de>
Sun, 3 Feb 2013 15:32:31 +0000 (16:32 +0100)
committerGunnar Beutner <gunnar.beutner@netways.de>
Sun, 3 Feb 2013 15:32:31 +0000 (16:32 +0100)
lib/icinga/service.cpp

index b1aab631f4bfa6f69960aaef7bcc3e1ec41f7117..1f4c3278dd6123698e861afc8f3c24cd4bb2f6e8 100644 (file)
@@ -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>()) {
-                       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();
 
-                       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<Dictionary>();
+               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