From 9c7c039365c40c648c29e0b26c2032377f844613 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Mon, 16 Jul 2012 15:10:42 +0200 Subject: [PATCH] Implemented native::NullCheck check method. --- cib/Makefile.am | 2 ++ cib/i2-cib.h | 1 + cib/nullchecktask.cpp | 46 +++++++++++++++++++++++++ cib/nullchecktask.h | 36 +++++++++++++++++++ components/checker/checkercomponent.cpp | 5 +-- 5 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 cib/nullchecktask.cpp create mode 100644 cib/nullchecktask.h diff --git a/cib/Makefile.am b/cib/Makefile.am index d87059a35..2be3dae88 100644 --- a/cib/Makefile.am +++ b/cib/Makefile.am @@ -19,6 +19,8 @@ libcib_la_SOURCES = \ macroprocessor.h \ nagioschecktask.cpp \ nagioschecktask.h \ + nullchecktask.cpp \ + nullchecktask.h \ service.cpp \ service.h \ servicegroup.cpp \ diff --git a/cib/i2-cib.h b/cib/i2-cib.h index 73ffe102d..60525b9fb 100644 --- a/cib/i2-cib.h +++ b/cib/i2-cib.h @@ -45,6 +45,7 @@ #include "macroprocessor.h" #include "checkresult.h" #include "nagioschecktask.h" +#include "nullchecktask.h" #include "servicestatusmessage.h" diff --git a/cib/nullchecktask.cpp b/cib/nullchecktask.cpp new file mode 100644 index 000000000..f0ca1b9a0 --- /dev/null +++ b/cib/nullchecktask.cpp @@ -0,0 +1,46 @@ +/****************************************************************************** + * Icinga 2 * + * Copyright (C) 2012 Icinga Development Team (http://www.icinga.org/) * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 2 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the Free Software Foundation * + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ******************************************************************************/ + +#include "i2-cib.h" + +using namespace icinga; + +void NullCheckTask::ScriptFunc(const ScriptTask::Ptr& task, const vector& arguments) +{ + if (arguments.size() < 1) + throw invalid_argument("Missing argument: Service must be specified."); + + time_t now; + time(&now); + + CheckResult cr; + cr.SetScheduleStart(now); + cr.SetScheduleEnd(now); + cr.SetExecutionStart(now); + cr.SetExecutionEnd(now); + cr.SetState(StateUnknown); + + task->FinishResult(cr.GetDictionary()); +} + +void NullCheckTask::Register(void) +{ + ScriptFunction::Ptr func = boost::make_shared(&NullCheckTask::ScriptFunc); + ScriptFunction::Register("native::NullCheck", func); +} diff --git a/cib/nullchecktask.h b/cib/nullchecktask.h new file mode 100644 index 000000000..c96c2b764 --- /dev/null +++ b/cib/nullchecktask.h @@ -0,0 +1,36 @@ +/****************************************************************************** + * Icinga 2 * + * Copyright (C) 2012 Icinga Development Team (http://www.icinga.org/) * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 2 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the Free Software Foundation * + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ******************************************************************************/ + +#ifndef NULLCHECKTASK_H +#define NULLCHECKTASK_H + +namespace icinga +{ + +class I2_CIB_API NullCheckTask +{ +public: + static void ScriptFunc(const ScriptTask::Ptr& task, const vector& arguments); + + static void Register(void); +}; + +} + +#endif /* NULLCHECKTASK_H */ diff --git a/components/checker/checkercomponent.cpp b/components/checker/checkercomponent.cpp index 269f876ef..e36c9710b 100644 --- a/components/checker/checkercomponent.cpp +++ b/components/checker/checkercomponent.cpp @@ -42,6 +42,7 @@ void CheckerComponent::Start(void) m_CheckTimer->Start(); NagiosCheckTask::Register(); + NullCheckTask::Register(); m_ResultTimer = boost::make_shared(); m_ResultTimer->SetInterval(5); @@ -76,14 +77,14 @@ void CheckerComponent::CheckTimerHandler(void) Logger::Write(LogDebug, "checker", "Executing service check for '" + service.GetName() + "'"); + m_PendingServices.insert(service.GetConfigObject()); + vector arguments; arguments.push_back(service.GetConfigObject()); ScriptTask::Ptr task; task = service.InvokeMethod("check", arguments, boost::bind(&CheckerComponent::CheckCompletedHandler, this, service, _1)); assert(task); /* TODO: gracefully handle missing hooks */ - m_PendingServices.insert(service.GetConfigObject()); - /*CheckTask::Ptr task = CheckTask::CreateTask(service, boost::bind(&CheckerComponent::CheckCompletedHandler, this, _1)); task->Start();*/ -- 2.40.0