]> granicus.if.org Git - icinga2/commitdiff
Implemented native::NullCheck check method.
authorGunnar Beutner <gunnar.beutner@netways.de>
Mon, 16 Jul 2012 13:10:42 +0000 (15:10 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Mon, 16 Jul 2012 13:10:42 +0000 (15:10 +0200)
cib/Makefile.am
cib/i2-cib.h
cib/nullchecktask.cpp [new file with mode: 0644]
cib/nullchecktask.h [new file with mode: 0644]
components/checker/checkercomponent.cpp

index d87059a354d98d29def3bc430e5861b489c0b6cd..2be3dae88a9d5cae8d4f516cbcc922ce00dae885 100644 (file)
@@ -19,6 +19,8 @@ libcib_la_SOURCES = \
        macroprocessor.h \
        nagioschecktask.cpp \
        nagioschecktask.h \
+       nullchecktask.cpp \
+       nullchecktask.h \
        service.cpp \
        service.h \
        servicegroup.cpp \
index 73ffe102d0a68e0b9ab9a3d7c4c12e2bceca7ba0..60525b9fb85fc7c7292218eed69d04811c82cd4f 100644 (file)
@@ -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 (file)
index 0000000..f0ca1b9
--- /dev/null
@@ -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<Variant>& 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<ScriptFunction>(&NullCheckTask::ScriptFunc);
+        ScriptFunction::Register("native::NullCheck", func);
+}
diff --git a/cib/nullchecktask.h b/cib/nullchecktask.h
new file mode 100644 (file)
index 0000000..c96c2b7
--- /dev/null
@@ -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<Variant>& arguments);
+
+       static void Register(void);
+};
+
+}
+
+#endif /* NULLCHECKTASK_H */
index 269f876ef34ccf8578404ee7528e04fc37298b16..e36c9710b23bcbea1941b420b9150485454cd2cb 100644 (file)
@@ -42,6 +42,7 @@ void CheckerComponent::Start(void)
        m_CheckTimer->Start();
 
        NagiosCheckTask::Register();
+       NullCheckTask::Register();
 
        m_ResultTimer = boost::make_shared<Timer>();
        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<Variant> 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();*/