From c7602a0f34572a1a7c34cc22c59be0ea85272574 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Mon, 8 Aug 2016 14:14:45 +0200 Subject: [PATCH] Implement process_check_result script method for the Checkable class fixes #12329 --- lib/icinga/CMakeLists.txt | 2 +- lib/icinga/checkable-script.cpp | 47 +++++++++++++++++++++++++++++++++ lib/icinga/checkable.cpp | 2 +- lib/icinga/checkable.hpp | 2 ++ 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 lib/icinga/checkable-script.cpp diff --git a/lib/icinga/CMakeLists.txt b/lib/icinga/CMakeLists.txt index 3ba0ad028..521da77b9 100644 --- a/lib/icinga/CMakeLists.txt +++ b/lib/icinga/CMakeLists.txt @@ -39,7 +39,7 @@ mkclass_target(user.ti user.tcpp user.thpp) set(icinga_SOURCES apiactions.cpp apievents.cpp checkable.cpp checkable.thpp checkable-dependency.cpp checkable-downtime.cpp checkable-event.cpp - checkable-flapping.cpp checkcommand.cpp checkcommand.thpp checkresult.cpp checkresult.thpp + checkable-flapping.cpp checkable-script.cpp checkcommand.cpp checkcommand.thpp checkresult.cpp checkresult.thpp cib.cpp clusterevents.cpp command.cpp command.thpp comment.cpp comment.thpp compatutility.cpp dependency.cpp dependency.thpp dependency-apply.cpp downtime.cpp downtime.thpp eventcommand.cpp eventcommand.thpp externalcommandprocessor.cpp host.cpp host.thpp hostgroup.cpp hostgroup.thpp icingaapplication.cpp icingaapplication.thpp diff --git a/lib/icinga/checkable-script.cpp b/lib/icinga/checkable-script.cpp new file mode 100644 index 000000000..ce02e6605 --- /dev/null +++ b/lib/icinga/checkable-script.cpp @@ -0,0 +1,47 @@ +/****************************************************************************** + * Icinga 2 * + * Copyright (C) 2012-2016 Icinga Development Team (https://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 "icinga/checkable.hpp" +#include "base/configobject.hpp" +#include "base/dictionary.hpp" +#include "base/function.hpp" +#include "base/functionwrapper.hpp" +#include "base/scriptframe.hpp" + +using namespace icinga; + +static void CheckableProcessCheckResult(const CheckResult::Ptr& cr) +{ + ScriptFrame *vframe = ScriptFrame::GetCurrentFrame(); + Checkable::Ptr self = vframe->Self; + self->ProcessCheckResult(cr); +} + +Object::Ptr Checkable::GetPrototype(void) +{ + static Dictionary::Ptr prototype; + + if (!prototype) { + prototype = new Dictionary(); + prototype->Set("process_check_result", new Function(WrapFunction(CheckableProcessCheckResult), false)); + } + + return prototype; +} + diff --git a/lib/icinga/checkable.cpp b/lib/icinga/checkable.cpp index dbf1305e1..ec42dd298 100644 --- a/lib/icinga/checkable.cpp +++ b/lib/icinga/checkable.cpp @@ -29,7 +29,7 @@ using namespace icinga; -REGISTER_TYPE(Checkable); +REGISTER_TYPE_WITH_PROTOTYPE(Checkable, Checkable::GetPrototype()); boost::signals2::signal Checkable::OnAcknowledgementSet; boost::signals2::signal Checkable::OnAcknowledgementCleared; diff --git a/lib/icinga/checkable.hpp b/lib/icinga/checkable.hpp index eef0208d4..7d7593385 100644 --- a/lib/icinga/checkable.hpp +++ b/lib/icinga/checkable.hpp @@ -179,6 +179,8 @@ public: static void DecreasePendingChecks(void); static int GetPendingChecks(void); + static Object::Ptr GetPrototype(void); + protected: virtual void Start(bool runtimeCreated) override; -- 2.40.0