From 4082f5795edb0d828947b0a80e305276b63f3cc7 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Wed, 28 Jan 2015 14:18:27 +0100 Subject: [PATCH] Implement accessor functions for hosts, services, etc. refs #7564 --- lib/icinga/CMakeLists.txt | 2 +- lib/icinga/objectutils.cpp | 51 ++++++++++++++++++++++++++++++++++++++ lib/icinga/objectutils.hpp | 44 ++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 lib/icinga/objectutils.cpp create mode 100644 lib/icinga/objectutils.hpp diff --git a/lib/icinga/CMakeLists.txt b/lib/icinga/CMakeLists.txt index b18d51182e1..f4b7e60af87 100644 --- a/lib/icinga/CMakeLists.txt +++ b/lib/icinga/CMakeLists.txt @@ -48,7 +48,7 @@ set(icinga_SOURCES externalcommandprocessor.cpp host.cpp host.thpp hostgroup.cpp hostgroup.thpp icingaapplication.cpp icingaapplication.thpp customvarobject.cpp customvarobject.thpp icingastatuswriter.cpp icingastatuswriter.thpp legacytimeperiod.cpp macroprocessor.cpp notificationcommand.cpp notificationcommand.thpp notification.cpp - notification.thpp notification-apply.cpp perfdatavalue.cpp perfdatavalue.thpp pluginutility.cpp scheduleddowntime.cpp + notification.thpp notification-apply.cpp objectutils.cpp perfdatavalue.cpp perfdatavalue.thpp pluginutility.cpp scheduleddowntime.cpp scheduleddowntime.thpp scheduleddowntime-apply.cpp service-apply.cpp checkable-check.cpp checkable-comment.cpp service.cpp service.thpp servicegroup.cpp servicegroup.thpp checkable-notification.cpp timeperiod.cpp timeperiod.thpp user.cpp user.thpp usergroup.cpp usergroup.thpp icinga-type.cpp diff --git a/lib/icinga/objectutils.cpp b/lib/icinga/objectutils.cpp new file mode 100644 index 00000000000..844dc2b93ca --- /dev/null +++ b/lib/icinga/objectutils.cpp @@ -0,0 +1,51 @@ +/****************************************************************************** + * Icinga 2 * + * Copyright (C) 2012-2015 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 "icinga/objectutils.hpp" +#include "icinga/host.hpp" +#include "icinga/user.hpp" +#include "icinga/checkcommand.hpp" +#include "icinga/eventcommand.hpp" +#include "icinga/notificationcommand.hpp" +#include "icinga/hostgroup.hpp" +#include "icinga/servicegroup.hpp" +#include "icinga/usergroup.hpp" + +using namespace icinga; + +REGISTER_SCRIPTFUNCTION(get_host, &Host::GetByName); +REGISTER_SCRIPTFUNCTION(get_service, &ObjectUtils::GetService); +REGISTER_SCRIPTFUNCTION(get_user, &User::GetByName); +REGISTER_SCRIPTFUNCTION(get_check_command, &CheckCommand::GetByName); +REGISTER_SCRIPTFUNCTION(get_event_command, &EventCommand::GetByName); +REGISTER_SCRIPTFUNCTION(get_notification_command, &NotificationCommand::GetByName); +REGISTER_SCRIPTFUNCTION(get_host_group, &HostGroup::GetByName); +REGISTER_SCRIPTFUNCTION(get_service_group, &ServiceGroup::GetByName); +REGISTER_SCRIPTFUNCTION(get_user_group, &UserGroup::GetByName); + +Service::Ptr ObjectUtils::GetService(const String& host, const String& name) +{ + Host::Ptr host_obj = Host::GetByName(host); + + if (!host_obj) + return Service::Ptr(); + + return host_obj->GetServiceByShortName(name); +} + diff --git a/lib/icinga/objectutils.hpp b/lib/icinga/objectutils.hpp new file mode 100644 index 00000000000..a5b30fcb95d --- /dev/null +++ b/lib/icinga/objectutils.hpp @@ -0,0 +1,44 @@ +/****************************************************************************** + * Icinga 2 * + * Copyright (C) 2012-2015 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 OBJECTUTILS_H +#define OBJECTUTILS_H + +#include "base/i2-base.hpp" +#include "base/string.hpp" +#include "icinga/service.hpp" + +namespace icinga +{ + +/** + * @ingroup icinga + */ +class I2_BASE_API ObjectUtils +{ +public: + static Service::Ptr GetService(const String& host, const String& name); + +private: + ObjectUtils(void); +}; + +} + +#endif /* OBJECTUTILS_H */