From d79680c642320e170ee81b6f1d53f5f01f5468ad Mon Sep 17 00:00:00 2001 From: Michael Friedrich Date: Thu, 3 Oct 2013 20:33:32 +0200 Subject: [PATCH] Add random state to NullCheckTask. refs #4774 --- lib/icinga/nullchecktask.cpp | 27 ++++++++++++++++++++++++++- lib/icinga/nullchecktask.h | 1 + 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/lib/icinga/nullchecktask.cpp b/lib/icinga/nullchecktask.cpp index 6171738f4..9fc0bb1f1 100644 --- a/lib/icinga/nullchecktask.cpp +++ b/lib/icinga/nullchecktask.cpp @@ -17,7 +17,11 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ******************************************************************************/ +#ifndef _WIN32 +#include +#endif #include "icinga/nullchecktask.h" +#include "base/utility.h" #include "base/scriptfunction.h" #include "base/logger_fwd.h" #include @@ -36,9 +40,30 @@ Dictionary::Ptr NullCheckTask::ScriptFunc(const Service::Ptr&) String output = "Hello from "; output += name; +#ifndef _WIN32 + unsigned int seed = Utility::GetPid() * time(NULL); + int state = rand_r(&seed) % 4; +#else + int state = 0; +#endif + Dictionary::Ptr cr = boost::make_shared(); cr->Set("output", output); - cr->Set("state", StateOK); + cr->Set("state", ExitStatusToState(state)); return cr; } + +ServiceState NullCheckTask::ExitStatusToState(int exitStatus) +{ + switch (exitStatus) { + case 0: + return StateOK; + case 1: + return StateWarning; + case 2: + return StateCritical; + default: + return StateUnknown; + } +} diff --git a/lib/icinga/nullchecktask.h b/lib/icinga/nullchecktask.h index fa9fcf873..edd8a1ade 100644 --- a/lib/icinga/nullchecktask.h +++ b/lib/icinga/nullchecktask.h @@ -36,6 +36,7 @@ class I2_ICINGA_API NullCheckTask { public: static Dictionary::Ptr ScriptFunc(const Service::Ptr& service); + static ServiceState ExitStatusToState(int exitStatus); private: NullCheckTask(void);