From 7540cd82a6139b7411498dc0623ec437563553c4 Mon Sep 17 00:00:00 2001 From: Michael Friedrich Date: Sat, 15 Sep 2012 12:51:40 +0200 Subject: [PATCH] WIP: compatido --- components/Makefile.am | 1 + components/compatido/Makefile.am | 34 ++ components/compatido/compatido.vcxproj | 94 ++++ .../compatido/compatido.vcxproj.filters | 35 ++ components/compatido/compatidocomponent.cpp | 484 ++++++++++++++++++ components/compatido/compatidocomponent.h | 70 +++ components/compatido/i2-compatido.h | 44 ++ components/compatido/idoprotoapi.h | 405 +++++++++++++++ components/compatido/idosocket.cpp | 93 ++++ components/compatido/idosocket.h | 55 ++ configure.ac | 3 +- icinga.sln | 7 + 12 files changed, 1324 insertions(+), 1 deletion(-) create mode 100644 components/compatido/Makefile.am create mode 100644 components/compatido/compatido.vcxproj create mode 100644 components/compatido/compatido.vcxproj.filters create mode 100644 components/compatido/compatidocomponent.cpp create mode 100644 components/compatido/compatidocomponent.h create mode 100644 components/compatido/i2-compatido.h create mode 100644 components/compatido/idoprotoapi.h create mode 100644 components/compatido/idosocket.cpp create mode 100644 components/compatido/idosocket.h diff --git a/components/Makefile.am b/components/Makefile.am index 16f0cc366..6dfa65b92 100644 --- a/components/Makefile.am +++ b/components/Makefile.am @@ -4,6 +4,7 @@ SUBDIRS = \ checker \ compat \ + compatido \ convenience \ delegation \ demo \ diff --git a/components/compatido/Makefile.am b/components/compatido/Makefile.am new file mode 100644 index 000000000..7ab30268e --- /dev/null +++ b/components/compatido/Makefile.am @@ -0,0 +1,34 @@ +## Process this file with automake to produce Makefile.in + +pkglib_LTLIBRARIES = \ + compatido.la + +compatido_la_SOURCES = \ + compatidocomponent.cpp \ + compatidocomponent.h \ + i2-compatido.h + +compatido_la_CPPFLAGS = \ + $(BOOST_CPPFLAGS) \ + -I${top_srcdir}/base \ + -I${top_srcdir}/dyn \ + -I${top_srcdir}/jsonrpc \ + -I${top_srcdir}/icinga \ + -I${top_srcdir}/cib + +compatido_la_LDFLAGS = \ + $(BOOST_LDFLAGS) \ + -module \ + -no-undefined \ + @RELEASE_INFO@ \ + @VERSION_INFO@ + +compatido_la_LIBADD = \ + $(BOOST_SIGNALS_LIB) \ + $(BOOST_THREAD_LIB) \ + ${top_builddir}/base/libbase.la \ + ${top_builddir}/dyn/libdyn.la \ + ${top_builddir}/jsonrpc/libjsonrpc.la \ + ${top_builddir}/icinga/libicinga.la \ + ${top_builddir}/cib/libcib.la + diff --git a/components/compatido/compatido.vcxproj b/components/compatido/compatido.vcxproj new file mode 100644 index 000000000..715796d56 --- /dev/null +++ b/components/compatido/compatido.vcxproj @@ -0,0 +1,94 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {7D0C062E-5199-4A5F-A31C-602275EBDF63} + compatido + + + + DynamicLibrary + true + NotSet + + + DynamicLibrary + false + true + NotSet + + + + + + + + + + + + + $(SolutionDir)\base;$(SolutionDir)\jsonrpc;$(SolutionDir)\icinga;$(SolutionDir)\cib;$(SolutionDir)\dyn;$(IncludePath) + + + $(OutDir);$(LibraryPath) + false + + + true + $(SolutionDir)\base;$(SolutionDir)\jsonrpc;$(SolutionDir)\icinga;$(SolutionDir)\cib;$(SolutionDir)\dyn;$(IncludePath) + $(OutDir);$(LibraryPath) + + + + Level3 + Disabled + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;COMPATIDO_EXPORTS;%(PreprocessorDefinitions) + + + true + base.lib;dyn.lib;jsonrpc.lib;icinga.lib;cib.lib;%(AdditionalDependencies) + Windows + + + + + Level3 + MaxSpeed + true + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;COMPATIDO_EXPORTS;%(PreprocessorDefinitions) + + + true + true + true + base.lib;dyn.lib;jsonrpc.lib;icinga.lib;cib.lib;%(AdditionalDependencies) + Windows + + + + + + + + + + + + + + + + diff --git a/components/compatido/compatido.vcxproj.filters b/components/compatido/compatido.vcxproj.filters new file mode 100644 index 000000000..6c0ee9412 --- /dev/null +++ b/components/compatido/compatido.vcxproj.filters @@ -0,0 +1,35 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + diff --git a/components/compatido/compatidocomponent.cpp b/components/compatido/compatidocomponent.cpp new file mode 100644 index 000000000..8b8986528 --- /dev/null +++ b/components/compatido/compatidocomponent.cpp @@ -0,0 +1,484 @@ +/****************************************************************************** + * 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-compatido.h" + +using namespace icinga; + +/** + * Returns the name of the component. + * + * @returns The name. + */ +String CompatIdoComponent::GetName(void) const +{ + return "compatido"; +} + +/** + * Starts the component. + */ +void CompatIdoComponent::Start(void) +{ + /* + * TODO + * we should have configs for + * - socket (unix or tcp) + * - data_processing_options + * - config_output_options - 0..orig, 1..retained (fake one) + * - INSTANCE_NAME ? + */ + m_StatusTimer = boost::make_shared(); + m_StatusTimer->SetInterval(15); + m_StatusTimer->OnTimerExpired.connect(boost::bind(&CompatIdoComponent::StatusTimerHandler, this)); + m_StatusTimer->Start(); + m_StatusTimer->Reschedule(0); + + /* + * open ido socket + */ + OpenSink("127.0.0.1", "5668"); + SendHello("i2-default"); + + /* + * send the config on startup - FIXME dynamic config update handler + */ + DumpConfigObjects(); +} + +/** + * Stops the component. + */ +void CompatIdoComponent::Stop(void) +{ + +} + +/* TODO + * subscribe to all status updates and checkresults and dump them + * should remove the periodic statusdata dump + */ + +/** + * Periodically dumps status information + * + * @param - Event arguments for the timer. + */ +void CompatIdoComponent::StatusTimerHandler(void) +{ + + /* + * TODO + * - fetch config, dump it + * - fetch status data, dump it periodically + * - subscribe to check events and status updates, dump it + */ + + /* + * HINTS + * - we don't have any implizit host commands, fake it + */ +} + +/** + * Periodically dumps config information + * + * @param - Event arguments for the timer. + */ +void CompatIdoComponent::ConfigTimerHandler(void) +{ + + /* + * TODO + * - fetch config, dump it + * - fetch status data, dump it periodically + * - subscribe to check events and status updates, dump it + */ + + /* + * HINTS + * - we don't have any implizit host commands, fake it + */ + + + +} + +/** + * opens a tcp connection to the socket + */ +void CompatIdoComponent::OpenSink(String node, String service) +{ + m_IdoSocket = boost::make_shared(RoleOutbound); + m_IdoSocket->Connect(node, service); + m_IdoSocket->Start(); +} + +/** + * sends hello msg to ido + */ +void CompatIdoComponent::SendHello(String instancename) +{ + time_t now; + time(&now); + + /* IDO_API_CONNECTION is always TCP */ + /* IDO_API_CONNECTTYPE is always initial */ + stringstream message; + message << "\n\n" + << IDO_API_HELLO << "\n" + << IDO_API_PROTOCOL << ": " << IDO_API_PROTOVERSION << "\n" + << IDO_API_AGENT << ": " << "I2 COMPAT-IDO" << "\n" + << IDO_API_AGENTVERSION << ": " << "2.0" << "\n" + << IDO_API_STARTTIME << ": " << now << "\n" + << IDO_API_DISPOSITION << ": " << IDO_API_DISPOSITION_REALTIME << "\n" + << IDO_API_CONNECTION << ": " << IDO_API_CONNECTION_TCPSOCKET << "\n" + << IDO_API_INSTANCENAME << ": " << instancename << "\n" + << IDO_API_STARTDATADUMP + << "\n\n"; + + m_IdoSocket->SendMessage(message.str()); +} + +void CompatIdoComponent::StartConfigDump() +{ + struct timeval now; + gettimeofday(&now, NULL); + + /* IDOMOD_CONFIG_DUMP_ORIGINAL=1 is the default config type */ + stringstream message; + message << "\n" + << IDO_API_STARTCONFIGDUMP << ":" << "\n" + << IDO_DATA_CONFIGDUMPTYPE << "=" << 1 << "\n" + << IDO_DATA_TIMESTAMP << "=" << now.tv_sec << "." << now.tv_usec << "\n" + << IDO_API_ENDDATA + << "\n"; + + m_IdoSocket->SendMessage(message.str()); +} + +void CompatIdoComponent::EndConfigDump() +{ + struct timeval now; + gettimeofday(&now, NULL); + + stringstream message; + message << "\n" + << IDO_API_ENDCONFIGDUMP << ":" << "\n" + << IDO_DATA_TIMESTAMP << "=" << now.tv_sec << "." << now.tv_usec << "\n" + << IDO_API_ENDDATA + << "\n"; + + m_IdoSocket->SendMessage(message.str()); + +} + +void CompatIdoComponent::DumpHostObject(const Host::Ptr& host) +{ + struct timeval now; + gettimeofday(&now, NULL); + + stringstream message; + message << "\n" + << IDO_API_HOSTDEFINITION << ":" << "\n" + << IDO_DATA_TIMESTAMP << "=" << now.tv_sec << "." << now.tv_usec << "\n" + << IDO_DATA_HOSTNAME << "=" << host->GetName() << "\n" + << IDO_DATA_DISPLAYNAME << "=" << host->GetAlias() << "\n" + << IDO_DATA_HOSTALIAS << "=" << host->GetAlias() << "\n" + << IDO_DATA_HOSTADDRESS << "=" << "" << "\n" + << IDO_DATA_HOSTADDRESS6 << "=" << "" << "\n" + << IDO_DATA_HOSTCHECKCOMMAND << "=" << "" << "\n" + << IDO_DATA_HOSTEVENTHANDLER << "=" << "" << "\n" + << IDO_DATA_HOSTNOTIFICATIONPERIOD << "=" << "" << "\n" + << IDO_DATA_HOSTCHECKPERIOD << "=" << "" << "\n" + << IDO_DATA_HOSTFAILUREPREDICTIONOPTIONS << "=" << "" << "\n" + << IDO_DATA_HOSTCHECKINTERVAL << "=" << 1 << "\n" + << IDO_DATA_HOSTRETRYINTERVAL << "=" << 1 << "\n" + << IDO_DATA_HOSTMAXCHECKATTEMPTS << "=" << 1 << "\n" + << IDO_DATA_FIRSTNOTIFICATIONDELAY << "=" << 0 << "\n" + << IDO_DATA_HOSTNOTIFICATIONINTERVAL << "=" << 0 << "\n" + << IDO_DATA_NOTIFYHOSTDOWN << "=" << 0 << "\n" + << IDO_DATA_NOTIFYHOSTUNREACHABLE << "=" << 0 << "\n" + << IDO_DATA_NOTIFYHOSTRECOVERY << "=" << 0 << "\n" + << IDO_DATA_NOTIFYHOSTFLAPPING << "=" << 0 << "\n" + << IDO_DATA_NOTIFYHOSTDOWNTIME << "=" << 0 << "\n" + << IDO_DATA_HOSTFLAPDETECTIONENABLED << "=" << 0 << "\n" + << IDO_DATA_FLAPDETECTIONONUP << "=" << 0 << "\n" + << IDO_DATA_FLAPDETECTIONOIDOWN << "=" << 0 << "\n" + << IDO_DATA_FLAPDETECTIONONUNREACHABLE << "=" << 0 << "\n" + << IDO_DATA_LOWHOSTFLAPTHRESHOLD << "=" << 0 << "\n" + << IDO_DATA_HIGHHOSTFLAPTHRESHOLD << "=" << 0 << "\n" + << IDO_DATA_STALKHOSTONUP << "=" << 0 << "\n" + << IDO_DATA_STALKHOSTOIDOWN << "=" << 0 << "\n" + << IDO_DATA_STALKHOSTONUNREACHABLE << "=" << 0 << "\n" + << IDO_DATA_HOSTFRESHNESSCHECKSENABLED << "=" << 0 << "\n" + << IDO_DATA_HOSTFRESHNESSTHRESHOLD << "=" << 0 << "\n" + << IDO_DATA_PROCESSHOSTPERFORMANCEDATA << "=" << 1 << "\n" + << IDO_DATA_ACTIVEHOSTCHECKSENABLED << "=" << 1 << "\n" + << IDO_DATA_PASSIVEHOSTCHECKSENABLED << "=" << 1 << "\n" + << IDO_DATA_HOSTEVENTHANDLERENABLED << "=" << 0 << "\n" + << IDO_DATA_RETAINHOSTSTATUSINFORMATION << "=" << 1 << "\n" + << IDO_DATA_RETAINHOSTNONSTATUSINFORMATION << "=" << 1 << "\n" + << IDO_DATA_HOSTNOTIFICATIONSENABLED << "=" << 1 << "\n" + << IDO_DATA_HOSTFAILUREPREDICTIONENABLED << "=" << 0 << "\n" + << IDO_DATA_OBSESSOVERHOST << "=" << 0 << "\n" + << IDO_DATA_NOTES << "=" << "i2_notes" << "\n" + << IDO_DATA_NOTESURL << "=" << "" << "\n" + << IDO_DATA_ACTIONURL << "=" << "" << "\n" + << IDO_DATA_ICONIMAGE << "=" << "" << "\n" + << IDO_DATA_ICONIMAGEALT << "=" << "" << "\n" + << IDO_DATA_VRMLIMAGE << "=" << "" << "\n" + << IDO_DATA_STATUSMAPIMAGE << "=" << "" << "\n" + << IDO_DATA_HAVE2DCOORDS << "=" << 0 << "\n" + << IDO_DATA_X2D << "=" << 0.0 << "\n" + << IDO_DATA_Y2D << "=" << 0.0 << "\n" + << IDO_DATA_HAVE3DCOORDS << "=" << 0 << "\n" + << IDO_DATA_X3D << "=" << 0.0 << "\n" + << IDO_DATA_Y3D << "=" << 0.0 << "\n" + << IDO_DATA_Z3D<< "=" << 0.0 << "\n" + /* FIXME add more related config items + * parents, contactgroups, contacts, custom vars + * before sending the message + */ + << IDO_API_ENDDATA << "\n\n"; + + + m_IdoSocket->SendMessage(message.str()); +} + +void CompatIdoComponent::DumpHostStatus(const Host::Ptr& host) +{ + +} + +void CompatIdoComponent::DumpServiceObject(const Service::Ptr& service) +{ + struct timeval now; + gettimeofday(&now, NULL); + + stringstream message; + message << "\n" + << IDO_API_SERVICEDEFINITION << ":" << "\n" + << IDO_DATA_TIMESTAMP << "=" << now.tv_sec << "." << now.tv_usec << "\n" + << IDO_DATA_HOSTNAME << "=" << service->GetHost()->GetName() << "\n" + << IDO_DATA_DISPLAYNAME << "=" << service->GetAlias() << "\n" + << IDO_DATA_SERVICEDESCRIPTION << "=" << service->GetAlias() << "\n" + << IDO_DATA_SERVICECHECKCOMMAND << "=" << "check_i2" << "\n" + << IDO_DATA_SERVICEEVENTHANDLER << "=" << "" << "\n" + << IDO_DATA_SERVICENOTIFICATIONPERIOD << "=" << "" << "\n" + << IDO_DATA_SERVICECHECKPERIOD << "=" << "" << "\n" + << IDO_DATA_SERVICEFAILUREPREDICTIONOPTIONS << "=" << "" << "\n" + << IDO_DATA_SERVICECHECKINTERVAL << "=" << 1 << "\n" + << IDO_DATA_SERVICERETRYINTERVAL << "=" << 1 << "\n" + << IDO_DATA_MAXSERVICECHECKATTEMPTS << "=" << 1 << "\n" + << IDO_DATA_FIRSTNOTIFICATIONDELAY << "=" << 0 << "\n" + << IDO_DATA_SERVICENOTIFICATIONINTERVAL << "=" << 0 << "\n" + << IDO_DATA_NOTIFYSERVICEUNKNOWN << "=" << 0 << "\n" + << IDO_DATA_NOTIFYSERVICEWARNING << "=" << 0 << "\n" + << IDO_DATA_NOTIFYSERVICECRITICAL << "=" << 0 << "\n" + << IDO_DATA_NOTIFYSERVICERECOVERY << "=" << 0 << "\n" + << IDO_DATA_NOTIFYSERVICEFLAPPING << "=" << 0 << "\n" + << IDO_DATA_NOTIFYSERVICEDOWNTIME << "=" << 0 << "\n" + << IDO_DATA_STALKSERVICEONOK << "=" << 0 << "\n" + << IDO_DATA_STALKSERVICEONWARNING << "=" << 0 << "\n" + << IDO_DATA_STALKSERVICEONUNKNOWN << "=" << 0 << "\n" + << IDO_DATA_STALKSERVICEONCRITICAL << "=" << 0 << "\n" + << IDO_DATA_SERVICEISVOLATILE << "=" << 0 << "\n" + << IDO_DATA_SERVICEFLAPDETECTIONENABLED << "=" << 0 << "\n" + << IDO_DATA_FLAPDETECTIONONOK << "=" << 0 << "\n" + << IDO_DATA_FLAPDETECTIONONWARNING << "=" << 0 << "\n" + << IDO_DATA_FLAPDETECTIONONUNKNOWN << "=" << 0 << "\n" + << IDO_DATA_FLAPDETECTIONONCRITICAL << "=" << 0 << "\n" + << IDO_DATA_LOWSERVICEFLAPTHRESHOLD << "=" << 0 << "\n" + << IDO_DATA_HIGHSERVICEFLAPTHRESHOLD << "=" << 0 << "\n" + << IDO_DATA_PROCESSSERVICEPERFORMANCEDATA << "=" << 1 << "\n" + << IDO_DATA_SERVICEFRESHNESSCHECKSENABLED << "=" << 0 << "\n" + << IDO_DATA_SERVICEFRESHNESSTHRESHOLD << "=" << 0 << "\n" + << IDO_DATA_PASSIVESERVICECHECKSENABLED << "=" << 1 << "\n" + << IDO_DATA_SERVICEEVENTHANDLERENABLED << "=" << 0 << "\n" + << IDO_DATA_ACTIVESERVICECHECKSENABLED << "=" << 1 << "\n" + << IDO_DATA_RETAINSERVICESTATUSINFORMATION << "=" << 1 << "\n" + << IDO_DATA_RETAINSERVICENONSTATUSINFORMATION << "=" << 1 << "\n" + << IDO_DATA_SERVICENOTIFICATIONSENABLED << "=" << 0 << "\n" + << IDO_DATA_OBSESSOVERSERVICE << "=" << 0 << "\n" + << IDO_DATA_SERVICEFAILUREPREDICTIONENABLED << "=" << 0 << "\n" + << IDO_DATA_NOTES << "=" << "i2_notes" << "\n" + << IDO_DATA_NOTESURL << "=" << "" << "\n" + << IDO_DATA_ACTIONURL << "=" << "" << "\n" + << IDO_DATA_ICONIMAGE << "=" << "" << "\n" + << IDO_DATA_ICONIMAGEALT << "=" << "" << "\n" + /* FIXME add more related config items + * contactgroups, contacts, custom vars + * before sending the message + */ + << IDO_API_ENDDATA << "\n\n"; + + m_IdoSocket->SendMessage(message.str()); +} + +void CompatIdoComponent::DumpServiceStatus(const Service::Ptr& service) +{ + +} + +/** + * process and dump all config objects + */ +void CompatIdoComponent::DumpConfigObjects(void) +{ + /* TODO dump + * commands, timeperiods, contact* + * escalations, dependencies + * if needed/available. + */ + Logger::Write(LogInformation, "compatido", "Writing compat ido config information"); + + /* tell ido2db that we start now */ + StartConfigDump(); + + /* hosts and hostgroups */ + map > hostgroups; + + DynamicObject::Ptr object; + BOOST_FOREACH(tie(tuples::ignore, object), DynamicObject::GetObjects("Host")) { + const Host::Ptr& host = static_pointer_cast(object); + + Dictionary::Ptr dict; + dict = host->GetGroups(); + + if (dict) { + Value hostgroup; + BOOST_FOREACH(tie(tuples::ignore, hostgroup), dict) { + hostgroups[hostgroup].push_back(host->GetName()); + } + } + + DumpHostObject(host); + } + + pair > hgt; + BOOST_FOREACH(hgt, hostgroups) { + const String& name = hgt.first; + const vector& hosts = hgt.second; + + if(HostGroup::Exists(name)) { + HostGroup::Ptr hg = HostGroup::GetByName(name); + + /* dump the hostgroup and its attributes/members to ido */ + struct timeval now; + gettimeofday(&now, NULL); + + stringstream message; + message << "\n" + << IDO_API_HOSTGROUPDEFINITION << ":" << "\n" + << IDO_DATA_TIMESTAMP << "=" << now.tv_sec << "." << now.tv_usec << "\n" + << IDO_DATA_HOSTGROUPNAME << "=" << name << "\n" + << IDO_DATA_HOSTGROUPALIAS << "=" << hg->GetAlias() << "\n"; + + CreateMessageList(message, hosts, IDO_DATA_HOSTGROUPMEMBER); + //vector::iterator it; + //for (it = hosts.begin(); it != hosts.end(); it++) { + // message << IDO_DATA_HOSTGROUPMEMBER << "=" << *it << "\n"; + //} + + message << IDO_API_ENDDATA << "\n\n"; + + m_IdoSocket->SendMessage(message.str()); + } + } + + /* services and servicegroups */ + map > servicegroups; + + BOOST_FOREACH(tie(tuples::ignore, object), DynamicObject::GetObjects("Service")) { + Service::Ptr service = static_pointer_cast(object); + + Dictionary::Ptr dict; + + dict = service->GetGroups(); + + if (dict) { + Value servicegroup; + BOOST_FOREACH(tie(tuples::ignore, servicegroup), dict) { + servicegroups[servicegroup].push_back(service); + } + } + + DumpServiceObject(service); + } + + pair > sgt; + BOOST_FOREACH(sgt, servicegroups) { + const String& name = sgt.first; + const vector& services = sgt.second; + + if (ServiceGroup::Exists(name)) { + ServiceGroup::Ptr sg = ServiceGroup::GetByName(name); + + /* dump the servicegroup and its attributes/members to ido */ + struct timeval now; + gettimeofday(&now, NULL); + + stringstream message; + message << "\n" + << IDO_API_SERVICEGROUPDEFINITION << ":" << "\n" + << IDO_DATA_TIMESTAMP << "=" << now.tv_sec << "." << now.tv_usec << "\n" + << IDO_DATA_SERVICEGROUPNAME << "=" << name << "\n" + << IDO_DATA_SERVICEGROUPALIAS << "=" << sg->GetAlias() << "\n"; + + vector sglist; + vector::iterator vt; + + BOOST_FOREACH(const Service::Ptr& service, services) { + sglist.push_back(service->GetHost()->GetName()); + sglist.push_back(service->GetAlias()); + } + + CreateMessageList(message, services, IDO_DATA_SERVICEGROUPMEMBER); + //for (vt = sglist.begin(); vt != sglist.end(); vt++) { + // message << IDO_DATA_SERVICEGROUPMEMBER << "=" << *vt << "\n"; + //} + + message << IDO_API_ENDDATA << "\n\n"; + + m_IdoSocket->SendMessage(message.str()); + } + } + + /* tell ido2db that we ended dumping the config */ + EndConfigDump(); +} + +/** + * process and dump all status data + */ +void CompatIdoComponent::DumpStatusData(void) +{ + Logger::Write(LogInformation, "compatido", "Writing compat ido status information"); + + stringstream message; + + /* program status - should probably done more often */ + message << "\n\n"; + +} + + + +EXPORT_COMPONENT(compatido, CompatIdoComponent); diff --git a/components/compatido/compatidocomponent.h b/components/compatido/compatidocomponent.h new file mode 100644 index 000000000..c6e374567 --- /dev/null +++ b/components/compatido/compatidocomponent.h @@ -0,0 +1,70 @@ +/****************************************************************************** + * 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 COMPATIDOCOMPONENT_H +#define COMPATIDOCOMPONENT_H + +namespace icinga +{ + +/** + * @ingroup compatido + */ +class CompatIdoComponent : public IComponent +{ +public: + virtual String GetName(void) const; + virtual void Start(void); + virtual void Stop(void); + +private: + Timer::Ptr m_StatusTimer; + IdoSocket::Ptr m_IdoSocket; + + void OpenSink(String node, String service ); + void SendHello(String instancename); + void StartConfigDump(); + void EndConfigDump(); + + void DumpConfigObjects(void); + void DumpHostObject(const Host::Ptr& host); + void DumpServiceObject(const Service::Ptr& service); + void DumpStatusData(void); + void DumpHostStatus(const Host::Ptr& host); + void DumpServiceStatus(const Service::Ptr& service); + + template + void CreateMessageList(stringstream& msg, const T& list, int type) + { + typename T::const_iterator it; + for (it = list.begin(); it != list.end(); it++) { + msg << type << "=" << *it << "\n"; + } + } + + //void DemoTimerHandler(void); + //void HelloWorldRequestHandler(const Endpoint::Ptr& sender, const RequestMessage& request); + + void ConfigTimerHandler(void); + void StatusTimerHandler(void); +}; + +} + +#endif /* COMPATIDOCOMPONENT_H */ diff --git a/components/compatido/i2-compatido.h b/components/compatido/i2-compatido.h new file mode 100644 index 000000000..aa2b4c45d --- /dev/null +++ b/components/compatido/i2-compatido.h @@ -0,0 +1,44 @@ +/****************************************************************************** + * 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 I2COMPATIDO_H +#define I2COMPATIDO_H + +/** + * @defgroup compatido Compat IDO component + * + * The compat ido component dumps config, status, history + * to a socket where ido2db is listening + */ + +#include +#include +#include +#include + +using std::stringstream; + +#include "idoprotoapi.h" +#include "idosocket.h" +#include "compatidocomponent.h" + + +#include + +#endif /* I2COMPATIDO_H */ diff --git a/components/compatido/idoprotoapi.h b/components/compatido/idoprotoapi.h new file mode 100644 index 000000000..c53d73bb8 --- /dev/null +++ b/components/compatido/idoprotoapi.h @@ -0,0 +1,405 @@ +/****************************************************************************** + * 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 COMPATIDOPROTOAPI_H +#define COMPATIDOPROTOAPI_H + +/* + * PROTOCOL VERSION + */ + +#define IDO_API_PROTOVERSION 2 + + +/* + * CONTROL STRINGS + */ + +#define IDO_API_NONE "" +#define IDO_API_HELLO "HELLO" +#define IDO_API_GOODBYE "GOODBYE" +#define IDO_API_PROTOCOL "PROTOCOL" +#define IDO_API_AGENT "AGENT" +#define IDO_API_AGENTVERSION "AGENTVERSION" +#define IDO_API_DISPOSITION "DISPOSITION" /* archived or realtime */ +#define IDO_API_CONNECTION "CONNECTION" /* immediate or deferred */ +#define IDO_API_CONNECTTYPE "CONNECTTYPE" /* initial or reconnection */ +#define IDO_API_DISPOSITION_ARCHIVED "ARCHIVED" +#define IDO_API_DISPOSITION_REALTIME "REALTIME" +#define IDO_API_CONNECTION_FILE "FILE" +#define IDO_API_CONNECTION_UNIXSOCKET "UNIXSOCKET" +#define IDO_API_CONNECTION_TCPSOCKET "TCPSOCKET" +#define IDO_API_CONNECTTYPE_INITIAL "INITIAL" +#define IDO_API_CONNECTTYPE_RECONNECT "RECONNECT" +#define IDO_API_STARTDATADUMP "STARTDATADUMP" +#define IDO_API_STARTTIME "STARTTIME" +#define IDO_API_ENDTIME "ENDTIME" +#define IDO_API_CONFIGDUMP_ORIGINAL "ORIGINAL" +#define IDO_API_CONFIGDUMP_RETAINED "RETAINED" +#define IDO_API_INSTANCENAME "INSTANCENAME" + +#define IDO_API_STARTCONFIGDUMP 900 +#define IDO_API_ENDCONFIGDUMP 901 +#define IDO_API_ENDDATA 999 +#define IDO_API_ENDDATADUMP 1000 + +/* + * DATA TYPES + */ + +#define IDO_API_LOGENTRY 100 + +#define IDO_API_PROCESSDATA 200 +#define IDO_API_TIMEDEVENTDATA 201 +#define IDO_API_LOGDATA 202 +#define IDO_API_SYSTEMCOMMANDDATA 203 +#define IDO_API_EVENTHANDLERDATA 204 +#define IDO_API_NOTIFICATIONDATA 205 +#define IDO_API_SERVICECHECKDATA 206 +#define IDO_API_HOSTCHECKDATA 207 +#define IDO_API_COMMENTDATA 208 +#define IDO_API_DOWNTIMEDATA 209 +#define IDO_API_FLAPPINGDATA 210 +#define IDO_API_PROGRAMSTATUSDATA 211 +#define IDO_API_HOSTSTATUSDATA 212 +#define IDO_API_SERVICESTATUSDATA 213 +#define IDO_API_ADAPTIVEPROGRAMDATA 214 +#define IDO_API_ADAPTIVEHOSTDATA 215 +#define IDO_API_ADAPTIVESERVICEDATA 216 +#define IDO_API_EXTERNALCOMMANDDATA 217 +#define IDO_API_AGGREGATEDSTATUSDATA 218 +#define IDO_API_RETENTIONDATA 219 +#define IDO_API_CONTACTNOTIFICATIONDATA 220 +#define IDO_API_CONTACTNOTIFICATIONMETHODDATA 221 +#define IDO_API_ACKNOWLEDGEMENTDATA 222 +#define IDO_API_STATECHANGEDATA 223 +#define IDO_API_CONTACTSTATUSDATA 224 +#define IDO_API_ADAPTIVECONTACTDATA 225 + +#define IDO_API_MAINCONFIGFILEVARIABLES 300 +#define IDO_API_RESOURCECONFIGFILEVARIABLES 301 +#define IDO_API_CONFIGVARIABLES 302 +#define IDO_API_RUNTIMEVARIABLES 303 + +#define IDO_API_HOSTDEFINITION 400 +#define IDO_API_HOSTGROUPDEFINITION 401 +#define IDO_API_SERVICEDEFINITION 402 +#define IDO_API_SERVICEGROUPDEFINITION 403 +#define IDO_API_HOSTDEPENDENCYDEFINITION 404 +#define IDO_API_SERVICEDEPENDENCYDEFINITION 405 +#define IDO_API_HOSTESCALATIONDEFINITION 406 +#define IDO_API_SERVICEESCALATIONDEFINITION 407 +#define IDO_API_COMMANDDEFINITION 408 +#define IDO_API_TIMEPERIODDEFINITION 409 +#define IDO_API_CONTACTDEFINITION 410 +#define IDO_API_CONTACTGROUPDEFINITION 411 + +/* + * COMMON DATA ATTRIBUTES + */ + +#define IDO_MAX_DATA_TYPES 270 + +#define IDO_DATA_NONE 0 + +#define IDO_DATA_TYPE 1 +#define IDO_DATA_FLAGS 2 +#define IDO_DATA_ATTRIBUTES 3 +#define IDO_DATA_TIMESTAMP 4 + +/* + * LIVE DATA ATTRIBUTES + */ + +#define IDO_DATA_ACKAUTHOR 5 +#define IDO_DATA_ACKDATA 6 +#define IDO_DATA_ACKNOWLEDGEMENTTYPE 7 +#define IDO_DATA_ACTIVEHOSTCHECKSENABLED 8 +#define IDO_DATA_ACTIVESERVICECHECKSENABLED 9 +#define IDO_DATA_AUTHORNAME 10 +#define IDO_DATA_CHECKCOMMAND 11 +#define IDO_DATA_CHECKTYPE 12 +#define IDO_DATA_COMMANDARGS 13 +#define IDO_DATA_COMMANDLINE 14 +#define IDO_DATA_COMMANDSTRING 15 +#define IDO_DATA_COMMANDTYPE 16 +#define IDO_DATA_COMMENT 17 +#define IDO_DATA_COMMENTID 18 +#define IDO_DATA_COMMENTTIME 19 +#define IDO_DATA_COMMENTTYPE 20 +#define IDO_DATA_CONFIGFILENAME 21 +#define IDO_DATA_CONFIGFILEVARIABLE 22 +#define IDO_DATA_CONFIGVARIABLE 23 +#define IDO_DATA_CONTACTSNOTIFIED 24 +#define IDO_DATA_CURRENTCHECKATTEMPT 25 +#define IDO_DATA_CURRENTNOTIFICATIONNUMBER 26 +#define IDO_DATA_CURRENTSTATE 27 +#define IDO_DATA_DAEMONMODE 28 +#define IDO_DATA_DOWNTIMEID 29 +#define IDO_DATA_DOWNTIMETYPE 30 +#define IDO_DATA_DURATION 31 +#define IDO_DATA_EARLYTIMEOUT 32 +#define IDO_DATA_ENDTIME 33 +#define IDO_DATA_ENTRYTIME 34 +#define IDO_DATA_ENTRYTYPE 35 +#define IDO_DATA_ESCALATED 36 +#define IDO_DATA_EVENTHANDLER 37 +#define IDO_DATA_EVENTHANDLERENABLED 38 +#define IDO_DATA_EVENTHANDLERSENABLED 39 +#define IDO_DATA_EVENTHANDLERTYPE 40 +#define IDO_DATA_EVENTTYPE 41 +#define IDO_DATA_EXECUTIONTIME 42 +#define IDO_DATA_EXPIRATIONTIME 43 +#define IDO_DATA_EXPIRES 44 +#define IDO_DATA_FAILUREPREDICTIONENABLED 45 +#define IDO_DATA_FIXED 46 +#define IDO_DATA_FLAPDETECTIONENABLED 47 +#define IDO_DATA_FLAPPINGTYPE 48 +#define IDO_DATA_GLOBALHOSTEVENTHANDLER 49 +#define IDO_DATA_GLOBALSERVICEEVENTHANDLER 50 +#define IDO_DATA_HASBEENCHECKED 51 +#define IDO_DATA_HIGHTHRESHOLD 52 +#define IDO_DATA_HOST 53 +#define IDO_DATA_ISFLAPPING 54 +#define IDO_DATA_LASTCOMMANDCHECK 55 +#define IDO_DATA_LASTHARDSTATE 56 +#define IDO_DATA_LASTHARDSTATECHANGE 57 +#define IDO_DATA_LASTHOSTCHECK 58 +#define IDO_DATA_LASTHOSTNOTIFICATION 59 +#define IDO_DATA_LASTLOGROTATION 60 +#define IDO_DATA_LASTSERVICECHECK 61 +#define IDO_DATA_LASTSERVICENOTIFICATION 62 +#define IDO_DATA_LASTSTATECHANGE 63 +#define IDO_DATA_LASTTIMECRITICAL 64 +#define IDO_DATA_LASTTIMEDOWN 65 +#define IDO_DATA_LASTTIMEOK 66 +#define IDO_DATA_LASTTIMEUNKNOWN 67 +#define IDO_DATA_LASTTIMEUNREACHABLE 68 +#define IDO_DATA_LASTTIMEUP 69 +#define IDO_DATA_LASTTIMEWARNING 70 +#define IDO_DATA_LATENCY 71 +#define IDO_DATA_LOGENTRY 72 +#define IDO_DATA_LOGENTRYTIME 73 +#define IDO_DATA_LOGENTRYTYPE 74 +#define IDO_DATA_LOWTHRESHOLD 75 +#define IDO_DATA_MAXCHECKATTEMPTS 76 +#define IDO_DATA_MODIFIEDHOSTATTRIBUTE 77 +#define IDO_DATA_MODIFIEDHOSTATTRIBUTES 78 +#define IDO_DATA_MODIFIEDSERVICEATTRIBUTE 79 +#define IDO_DATA_MODIFIEDSERVICEATTRIBUTES 80 +#define IDO_DATA_NEXTHOSTCHECK 81 +#define IDO_DATA_NEXTHOSTNOTIFICATION 82 +#define IDO_DATA_NEXTSERVICECHECK 83 +#define IDO_DATA_NEXTSERVICENOTIFICATION 84 +#define IDO_DATA_NOMORENOTIFICATIONS 85 +#define IDO_DATA_NORMALCHECKINTERVAL 86 +#define IDO_DATA_NOTIFICATIONREASON 87 +#define IDO_DATA_NOTIFICATIONSENABLED 88 +#define IDO_DATA_NOTIFICATIONTYPE 89 +#define IDO_DATA_NOTIFYCONTACTS 90 +#define IDO_DATA_OBSESSOVERHOST 91 +#define IDO_DATA_OBSESSOVERHOSTS 92 +#define IDO_DATA_OBSESSOVERSERVICE 93 +#define IDO_DATA_OBSESSOVERSERVICES 94 +#define IDO_DATA_OUTPUT 95 +#define IDO_DATA_PASSIVEHOSTCHECKSENABLED 96 +#define IDO_DATA_PASSIVESERVICECHECKSENABLED 97 +#define IDO_DATA_PERCENTSTATECHANGE 98 +#define IDO_DATA_PERFDATA 99 +#define IDO_DATA_PERSISTENT 100 +#define IDO_DATA_PROBLEMHASBEENACKNOWLEDGED 101 +#define IDO_DATA_PROCESSID 102 +#define IDO_DATA_PROCESSPERFORMANCEDATA 103 +#define IDO_DATA_PROGRAMDATE 104 +#define IDO_DATA_PROGRAMNAME 105 +#define IDO_DATA_PROGRAMSTARTTIME 106 +#define IDO_DATA_PROGRAMVERSION 107 +#define IDO_DATA_RECURRING 108 +#define IDO_DATA_RETRYCHECKINTERVAL 109 +#define IDO_DATA_RETURNCODE 110 +#define IDO_DATA_RUNTIME 111 +#define IDO_DATA_RUNTIMEVARIABLE 112 +#define IDO_DATA_SCHEDULEDDOWNTIMEDEPTH 113 +#define IDO_DATA_SERVICE 114 +#define IDO_DATA_SHOULDBESCHEDULED 115 +#define IDO_DATA_SOURCE 116 +#define IDO_DATA_STARTTIME 117 +#define IDO_DATA_STATE 118 +#define IDO_DATA_STATECHANGE 119 +#define IDO_DATA_STATECHANGETYPE 120 +#define IDO_DATA_STATETYPE 121 +#define IDO_DATA_STICKY 122 +#define IDO_DATA_TIMEOUT 123 +#define IDO_DATA_TRIGGEREDBY 124 +#define IDO_DATA_LONGOUTPUT 125 + +/* + * OBJECT CONFIG DATA ATTRIBUTES + */ + +#define IDO_DATA_ACTIONURL 126 +#define IDO_DATA_COMMANDNAME 127 +#define IDO_DATA_CONTACTADDRESS 128 +#define IDO_DATA_CONTACTALIAS 129 +#define IDO_DATA_CONTACTGROUP 130 +#define IDO_DATA_CONTACTGROUPALIAS 131 +#define IDO_DATA_CONTACTGROUPMEMBER 132 +#define IDO_DATA_CONTACTGROUPNAME 133 +#define IDO_DATA_CONTACTNAME 134 +#define IDO_DATA_DEPENDENCYTYPE 135 +#define IDO_DATA_DEPENDENTHOSTNAME 136 +#define IDO_DATA_DEPENDENTSERVICEDESCRIPTION 137 +#define IDO_DATA_EMAILADDRESS 138 +#define IDO_DATA_ESCALATEONCRITICAL 139 +#define IDO_DATA_ESCALATEOIDOWN 140 +#define IDO_DATA_ESCALATEONRECOVERY 141 +#define IDO_DATA_ESCALATEONUNKNOWN 142 +#define IDO_DATA_ESCALATEONUNREACHABLE 143 +#define IDO_DATA_ESCALATEONWARNING 144 +#define IDO_DATA_ESCALATIONPERIOD 145 +#define IDO_DATA_FAILONCRITICAL 146 +#define IDO_DATA_FAILOIDOWN 147 +#define IDO_DATA_FAILONOK 148 +#define IDO_DATA_FAILONUNKNOWN 149 +#define IDO_DATA_FAILONUNREACHABLE 150 +#define IDO_DATA_FAILONUP 151 +#define IDO_DATA_FAILONWARNING 152 +#define IDO_DATA_FIRSTNOTIFICATION 153 +#define IDO_DATA_HAVE2DCOORDS 154 +#define IDO_DATA_HAVE3DCOORDS 155 +#define IDO_DATA_HIGHHOSTFLAPTHRESHOLD 156 +#define IDO_DATA_HIGHSERVICEFLAPTHRESHOLD 157 +#define IDO_DATA_HOSTADDRESS 158 +#define IDO_DATA_HOSTALIAS 159 +#define IDO_DATA_HOSTCHECKCOMMAND 160 +#define IDO_DATA_HOSTCHECKINTERVAL 161 +#define IDO_DATA_HOSTCHECKPERIOD 162 +#define IDO_DATA_HOSTEVENTHANDLER 163 +#define IDO_DATA_HOSTEVENTHANDLERENABLED 164 +#define IDO_DATA_HOSTFAILUREPREDICTIONENABLED 165 +#define IDO_DATA_HOSTFAILUREPREDICTIONOPTIONS 166 +#define IDO_DATA_HOSTFLAPDETECTIONENABLED 167 +#define IDO_DATA_HOSTFRESHNESSCHECKSENABLED 168 +#define IDO_DATA_HOSTFRESHNESSTHRESHOLD 169 +#define IDO_DATA_HOSTGROUPALIAS 170 +#define IDO_DATA_HOSTGROUPMEMBER 171 +#define IDO_DATA_HOSTGROUPNAME 172 +#define IDO_DATA_HOSTMAXCHECKATTEMPTS 173 +#define IDO_DATA_HOSTNAME 174 +#define IDO_DATA_HOSTNOTIFICATIONCOMMAND 175 +#define IDO_DATA_HOSTNOTIFICATIONINTERVAL 176 +#define IDO_DATA_HOSTNOTIFICATIONPERIOD 177 +#define IDO_DATA_HOSTNOTIFICATIONSENABLED 178 +#define IDO_DATA_ICONIMAGE 179 +#define IDO_DATA_ICONIMAGEALT 180 +#define IDO_DATA_INHERITSPARENT 181 +#define IDO_DATA_LASTNOTIFICATION 182 +#define IDO_DATA_LOWHOSTFLAPTHRESHOLD 183 +#define IDO_DATA_LOWSERVICEFLAPTHRESHOLD 184 +#define IDO_DATA_MAXSERVICECHECKATTEMPTS 185 +#define IDO_DATA_NOTES 186 +#define IDO_DATA_NOTESURL 187 +#define IDO_DATA_NOTIFICATIONINTERVAL 188 +#define IDO_DATA_NOTIFYHOSTDOWN 189 +#define IDO_DATA_NOTIFYHOSTFLAPPING 190 +#define IDO_DATA_NOTIFYHOSTRECOVERY 191 +#define IDO_DATA_NOTIFYHOSTUNREACHABLE 192 +#define IDO_DATA_NOTIFYSERVICECRITICAL 193 +#define IDO_DATA_NOTIFYSERVICEFLAPPING 194 +#define IDO_DATA_NOTIFYSERVICERECOVERY 195 +#define IDO_DATA_NOTIFYSERVICEUNKNOWN 196 +#define IDO_DATA_NOTIFYSERVICEWARNING 197 +#define IDO_DATA_PAGERADDRESS 198 + +#define IDO_DATA_PARENTHOST 200 +#define IDO_DATA_PROCESSHOSTPERFORMANCEDATA 201 +#define IDO_DATA_PROCESSSERVICEPERFORMANCEDATA 202 +#define IDO_DATA_RETAINHOSTNONSTATUSINFORMATION 203 +#define IDO_DATA_RETAINHOSTSTATUSINFORMATION 204 +#define IDO_DATA_RETAINSERVICENONSTATUSINFORMATION 205 +#define IDO_DATA_RETAINSERVICESTATUSINFORMATION 206 +#define IDO_DATA_SERVICECHECKCOMMAND 207 +#define IDO_DATA_SERVICECHECKINTERVAL 208 +#define IDO_DATA_SERVICECHECKPERIOD 209 +#define IDO_DATA_SERVICEDESCRIPTION 210 +#define IDO_DATA_SERVICEEVENTHANDLER 211 +#define IDO_DATA_SERVICEEVENTHANDLERENABLED 212 +#define IDO_DATA_SERVICEFAILUREPREDICTIONENABLED 213 +#define IDO_DATA_SERVICEFAILUREPREDICTIONOPTIONS 214 +#define IDO_DATA_SERVICEFLAPDETECTIONENABLED 215 +#define IDO_DATA_SERVICEFRESHNESSCHECKSENABLED 216 +#define IDO_DATA_SERVICEFRESHNESSTHRESHOLD 217 +#define IDO_DATA_SERVICEGROUPALIAS 218 +#define IDO_DATA_SERVICEGROUPMEMBER 219 +#define IDO_DATA_SERVICEGROUPNAME 220 +#define IDO_DATA_SERVICEISVOLATILE 221 +#define IDO_DATA_SERVICENOTIFICATIONCOMMAND 222 +#define IDO_DATA_SERVICENOTIFICATIONINTERVAL 223 +#define IDO_DATA_SERVICENOTIFICATIONPERIOD 224 +#define IDO_DATA_SERVICENOTIFICATIONSENABLED 225 +#define IDO_DATA_SERVICERETRYINTERVAL 226 + +#define IDO_DATA_STALKHOSTOIDOWN 228 +#define IDO_DATA_STALKHOSTONUNREACHABLE 229 +#define IDO_DATA_STALKHOSTONUP 230 +#define IDO_DATA_STALKSERVICEONCRITICAL 231 +#define IDO_DATA_STALKSERVICEONOK 232 +#define IDO_DATA_STALKSERVICEONUNKNOWN 233 +#define IDO_DATA_STALKSERVICEONWARNING 234 +#define IDO_DATA_STATUSMAPIMAGE 235 +#define IDO_DATA_TIMEPERIODALIAS 236 +#define IDO_DATA_TIMEPERIODNAME 237 +#define IDO_DATA_TIMERANGE 238 +#define IDO_DATA_VRMLIMAGE 239 +#define IDO_DATA_X2D 240 +#define IDO_DATA_X3D 241 +#define IDO_DATA_Y2D 242 +#define IDO_DATA_Y3D 243 +#define IDO_DATA_Z3D 244 + +#define IDO_DATA_CONFIGDUMPTYPE 245 + +#define IDO_DATA_FIRSTNOTIFICATIONDELAY 246 +#define IDO_DATA_HOSTRETRYINTERVAL 247 +#define IDO_DATA_NOTIFYHOSTDOWNTIME 248 +#define IDO_DATA_NOTIFYSERVICEDOWNTIME 249 +#define IDO_DATA_CANSUBMITCOMMANDS 250 +#define IDO_DATA_FLAPDETECTIONONUP 251 +#define IDO_DATA_FLAPDETECTIONOIDOWN 252 +#define IDO_DATA_FLAPDETECTIONONUNREACHABLE 253 +#define IDO_DATA_FLAPDETECTIONONOK 254 +#define IDO_DATA_FLAPDETECTIONONWARNING 255 +#define IDO_DATA_FLAPDETECTIONONUNKNOWN 256 +#define IDO_DATA_FLAPDETECTIONONCRITICAL 257 +#define IDO_DATA_DISPLAYNAME 258 +#define IDO_DATA_DEPENDENCYPERIOD 259 +#define IDO_DATA_MODIFIEDCONTACTATTRIBUTE 260 /* LIVE DATA */ +#define IDO_DATA_MODIFIEDCONTACTATTRIBUTES 261 /* LIVE DATA */ +#define IDO_DATA_CUSTOMVARIABLE 262 +#define IDO_DATA_HASBEENMODIFIED 263 +#define IDO_DATA_CONTACT 264 +#define IDO_DATA_LASTSTATE 265 + +#define IDO_DATA_HOSTADDRESS6 266 +#define IDO_DATA_END_TIME 267 /* ACKNOWLEDGEMENT DATA */ +#define IDO_DATA_DOWNTIMEISINEFFECT 268 +#define IDO_DATA_DOWNTIMETRIGGERTIME 269 + + +#endif /* COMPATIDOPROTOAPI_H */ diff --git a/components/compatido/idosocket.cpp b/components/compatido/idosocket.cpp new file mode 100644 index 000000000..3fc34207e --- /dev/null +++ b/components/compatido/idosocket.cpp @@ -0,0 +1,93 @@ +/****************************************************************************** + * 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-compatido.h" + +using namespace icinga; + +/** + * Constructor for the IdoSocket class. + * + * @param role The role of the underlying TCP client. + */ +IdoSocket::IdoSocket(TcpClientRole role) + : TcpClient(role) +{ + /* + * we currently do not receive any data from the ido socket, + * this is just data output - so we do not need to bind + * a local instance of our datahandler in case of a new + * signal telling about new data + */ + //OnDataAvailable.connect(boost::bind(&IdoSocket::DataAvailableHandler, this)); +} + +/** + * Sends a message to the ido socket + * + * @param message The message. + */ +void IdoSocket::SendMessage(const String& message) +{ + /* + * write our message to the send queue + * as we inherit all the functionality + * of the tcpclient class + */ + Write(message, message.size()); +} + +/** + * Processes inbound data. + * Currently not used, as we do not receive data from ido sockets + */ +void IdoSocket::DataAvailableHandler(void) +{ + for (;;) { + string sString; + + { + mutex::scoped_lock lock(GetMutex()); + + if (!Netstring::ReadStringFromFIFO(GetRecvQueue(), &sString)) + return; + } + + try { + //message = MessagePart(jsonString); + //OnNewMessage(GetSelf(), message); + } catch (const exception& ex) { + Logger::Write(LogCritical, "idosocket", "Exception while processing message from idosocket client: " + string(ex.what())); + } + } +} + +/** + * Factory function for ido socket clients. + * + * @param fd The file descriptor. + * @param role The role of the underlying TCP client. + * @returns A new ido socket client. + */ +IdoSocket::Ptr icinga::IdoSocketFactory(SOCKET fd, TcpClientRole role) +{ + IdoSocket::Ptr client = boost::make_shared(role); + client->SetFD(fd); + return client; +} diff --git a/components/compatido/idosocket.h b/components/compatido/idosocket.h new file mode 100644 index 000000000..890518cfd --- /dev/null +++ b/components/compatido/idosocket.h @@ -0,0 +1,55 @@ +/****************************************************************************** + * 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 IDOSOCKET_H +#define IDOSOCKET_H + +#include "i2-compatido.h" + +namespace icinga +{ + +/** + * An IDO socket client. + * + * @ingroup compatido + */ +class IdoSocket : public TcpClient +{ +public: + typedef shared_ptr Ptr; + typedef weak_ptr WeakPtr; + + IdoSocket(TcpClientRole role); + + void SendMessage(const String& message); + + boost::signal OnNewMessage; + +private: + void DataAvailableHandler(void); + + friend IdoSocket::Ptr IdoSocketFactory(SOCKET fd, TcpClientRole role); +}; + +IdoSocket::Ptr IdoSocketFactory(SOCKET fd, TcpClientRole role); + +} + +#endif /* JSONRPCCLIENT_H */ diff --git a/configure.ac b/configure.ac index dd99c5000..414ebf703 100644 --- a/configure.ac +++ b/configure.ac @@ -51,7 +51,7 @@ AM_PROG_LEX AC_PROG_YACC AC_PROG_LIBTOOL AX_CXX_GCC_ABI_DEMANGLE -AX_BOOST_BASE([1.46], [], [AC_MSG_ERROR([You need the Boost headers and libraries in order to build this application])]) +AX_BOOST_BASE([1.42], [], [AC_MSG_ERROR([You need the Boost headers and libraries in order to build this application])]) AX_BOOST_SIGNALS AX_BOOST_THREAD AX_BOOST_SYSTEM @@ -70,6 +70,7 @@ Makefile components/Makefile components/checker/Makefile components/compat/Makefile +components/compatido/Makefile components/convenience/Makefile components/delegation/Makefile components/demo/Makefile diff --git a/icinga.sln b/icinga.sln index 8f476609e..b3d98dd31 100644 --- a/icinga.sln +++ b/icinga.sln @@ -46,6 +46,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convenience", "components\c {C1FC77E1-04A4-481B-A78B-2F7AF489C2F8} = {C1FC77E1-04A4-481B-A78B-2F7AF489C2F8} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compatido", "components\compatido\compatido.vcxproj", "{7D0C062E-5199-4A5F-A31C-602275EBDF63}" +EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "components", "components", "{4A1773FD-DDED-4952-8700-C898E890554A}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "libraries", "libraries", "{BC82DE9C-42E2-4880-92DA-C2269D2F6416}" @@ -118,6 +120,10 @@ Global {D02A349B-BAF7-41FB-86FF-B05BA05FE578}.Debug|Win32.Build.0 = Debug|Win32 {D02A349B-BAF7-41FB-86FF-B05BA05FE578}.Release|Win32.ActiveCfg = Release|Win32 {D02A349B-BAF7-41FB-86FF-B05BA05FE578}.Release|Win32.Build.0 = Release|Win32 + {7D0C062E-5199-4A5F-A31C-602275EBDF63}.Debug|Win32.ActiveCfg = Debug|Win32 + {7D0C062E-5199-4A5F-A31C-602275EBDF63}.Debug|Win32.Build.0 = Debug|Win32 + {7D0C062E-5199-4A5F-A31C-602275EBDF63}.Release|Win32.ActiveCfg = Release|Win32 + {7D0C062E-5199-4A5F-A31C-602275EBDF63}.Release|Win32.Build.0 = Release|Win32 {9C92DA90-FD53-43A9-A244-90F2E8AF9677}.Debug|Win32.ActiveCfg = Debug|Win32 {9C92DA90-FD53-43A9-A244-90F2E8AF9677}.Debug|Win32.Build.0 = Debug|Win32 {9C92DA90-FD53-43A9-A244-90F2E8AF9677}.Release|Win32.ActiveCfg = Release|Win32 @@ -145,6 +151,7 @@ Global {2BD1C70C-43DB-4F44-B66B-67CF5C7044AA} = {4A1773FD-DDED-4952-8700-C898E890554A} {D02A349B-BAF7-41FB-86FF-B05BA05FE578} = {4A1773FD-DDED-4952-8700-C898E890554A} {2E6C1133-730F-4875-A72C-B455B1DD4C5C} = {4A1773FD-DDED-4952-8700-C898E890554A} + {7D0C062E-5199-4A5F-A31C-602275EBDF63} = {4A1773FD-DDED-4952-8700-C898E890554A} {19CBCE06-3F5C-479A-BD75-E2AB6215D345} = {3BE47C55-D74A-46E6-8F8B-470B3FD29FB7} {66BED474-C33F-48F9-90BA-BBCFEDC006B8} = {3BE47C55-D74A-46E6-8F8B-470B3FD29FB7} {9C92DA90-FD53-43A9-A244-90F2E8AF9677} = {BC82DE9C-42E2-4880-92DA-C2269D2F6416}