]> granicus.if.org Git - icinga2/commitdiff
Livestatus: Add zone object table w/ endpoint members
authorMichael Friedrich <michael.friedrich@netways.de>
Tue, 14 Jul 2015 16:08:55 +0000 (18:08 +0200)
committerMichael Friedrich <michael.friedrich@netways.de>
Tue, 14 Jul 2015 16:09:24 +0000 (18:09 +0200)
refs #9286

doc/22-appendix.md
lib/livestatus/CMakeLists.txt
lib/livestatus/endpointstable.cpp
lib/livestatus/endpointstable.hpp
lib/livestatus/table.cpp
lib/livestatus/zonestable.cpp [new file with mode: 0644]
lib/livestatus/zonestable.hpp [new file with mode: 0644]

index f8a4f02beb23066e79b9dd11ea0a01d2956001a4..49c66da37feca9536705340d05528016a9aa0ac9 100644 (file)
@@ -214,7 +214,7 @@ Additional global custom variables populated from 'Vars' constant (object_id is
 
 Icinga 2 specific extensions are shown below:
 
-New table: `endpoints`
+New table: `endpoints`:
 
   Table     | Column
   ----------|--------------
@@ -222,6 +222,16 @@ New table: `endpoints`
   endpoints | identity
   endpoints | node
   endpoints | is_connected
+  endpoints | zone
+
+New table: `zones`:
+
+  Table     | Column
+  ----------|--------------
+  zone      | name
+  zone      | endpoints
+  zone      | parent
+  zone      | global
 
 New columns:
 
index 2913c4ffa9409c1d87cb295e16b6d4f150d63e5c..7667e9930538f9be59d3ebdecba4094658ef1641 100644 (file)
@@ -28,7 +28,7 @@ set(livestatus_SOURCES
   minaggregator.cpp negatefilter.cpp orfilter.cpp
   servicegroupstable.cpp servicestable.cpp statehisttable.cpp
   statustable.cpp stdaggregator.cpp sumaggregator.cpp table.cpp
-  timeperiodstable.cpp
+  timeperiodstable.cpp zonestable.cpp
 )
 
 if(ICINGA2_UNITY_BUILD)
index a5cece345e5b1a6268a11969d687d259ca2176df..ef8b1d2900b38c4430b1c942418e20f04c5af25b 100644 (file)
@@ -22,6 +22,7 @@
 #include "icinga/service.hpp"
 #include "icinga/icingaapplication.hpp"
 #include "remote/endpoint.hpp"
+#include "remote/zone.hpp"
 #include "base/dynamictype.hpp"
 #include "base/objectlock.hpp"
 #include "base/convert.hpp"
@@ -46,6 +47,7 @@ void EndpointsTable::AddColumns(Table *table, const String& prefix,
        table->AddColumn(prefix + "identity", Column(&EndpointsTable::IdentityAccessor, objectAccessor));
        table->AddColumn(prefix + "node", Column(&EndpointsTable::NodeAccessor, objectAccessor));
        table->AddColumn(prefix + "is_connected", Column(&EndpointsTable::IsConnectedAccessor, objectAccessor));
+       table->AddColumn(prefix + "zone", Column(&EndpointsTable::ZoneAccessor, objectAccessor));
 }
 
 String EndpointsTable::GetName(void) const
@@ -111,3 +113,18 @@ Value EndpointsTable::IsConnectedAccessor(const Value& row)
 
        return is_connected;
 }
+
+Value EndpointsTable::ZoneAccessor(const Value& row)
+{
+       Endpoint::Ptr endpoint = static_cast<Endpoint::Ptr>(row);
+
+       if (!endpoint)
+               return Empty;
+
+       Zone::Ptr zone = endpoint->GetZone();
+
+       if (!zone)
+               return Empty;
+
+       return zone->GetName();
+}
index 9c7e88a8270704abe3759208f24d50abdc9eb19a..90bcf8e412e218c25c021708aefa4afbecdfd99c 100644 (file)
@@ -50,6 +50,7 @@ protected:
        static Value IdentityAccessor(const Value& row);
        static Value NodeAccessor(const Value& row);
        static Value IsConnectedAccessor(const Value& row);
+       static Value ZoneAccessor(const Value& row);
 };
 
 }
index 0f8e0408f512d5f8e87d50d7fd1c539dd55abd5f..ca677921e91da75e0a1010706af56272224f0457 100644 (file)
@@ -29,6 +29,7 @@
 #include "livestatus/commentstable.hpp"
 #include "livestatus/downtimestable.hpp"
 #include "livestatus/endpointstable.hpp"
+#include "livestatus/zonestable.hpp"
 #include "livestatus/timeperiodstable.hpp"
 #include "livestatus/logtable.hpp"
 #include "livestatus/statehisttable.hpp"
@@ -82,6 +83,8 @@ Table::Ptr Table::GetByName(const String& name, const String& compat_log_path, c
                return new StateHistTable(compat_log_path, from, until);
        else if (name == "endpoints")
                return new EndpointsTable();
+       else if (name == "zones")
+               return new ZonesTable();
 
        return Table::Ptr();
 }
diff --git a/lib/livestatus/zonestable.cpp b/lib/livestatus/zonestable.cpp
new file mode 100644 (file)
index 0000000..89461d9
--- /dev/null
@@ -0,0 +1,113 @@
+/******************************************************************************
+ * 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 "livestatus/zonestable.hpp"
+#include "remote/zone.hpp"
+#include "base/dynamictype.hpp"
+#include <boost/foreach.hpp>
+
+using namespace icinga;
+
+ZonesTable::ZonesTable(void)
+{
+       AddColumns(this);
+}
+
+void ZonesTable::AddColumns(Table *table, const String& prefix,
+    const Column::ObjectAccessor& objectAccessor)
+{
+       table->AddColumn(prefix + "name", Column(&ZonesTable::NameAccessor, objectAccessor));
+       table->AddColumn(prefix + "parent", Column(&ZonesTable::ParentAccessor, objectAccessor));
+       table->AddColumn(prefix + "endpoints", Column(&ZonesTable::EndpointsAccessor, objectAccessor));
+       table->AddColumn(prefix + "global", Column(&ZonesTable::GlobalAccessor, objectAccessor));
+}
+
+String ZonesTable::GetName(void) const
+{
+       return "zones";
+}
+
+String ZonesTable::GetPrefix(void) const
+{
+       return "zone";
+}
+
+void ZonesTable::FetchRows(const AddRowFunction& addRowFn)
+{
+       BOOST_FOREACH(const Zone::Ptr& zone, DynamicType::GetObjectsByType<Zone>()) {
+               if (!addRowFn(zone, LivestatusGroupByNone, Empty))
+                       return;
+       }
+}
+
+Value ZonesTable::NameAccessor(const Value& row)
+{
+       Zone::Ptr zone = static_cast<Zone::Ptr>(row);
+
+       if (!zone)
+               return Empty;
+
+       return zone->GetName();
+}
+
+Value ZonesTable::ParentAccessor(const Value& row)
+{
+       Zone::Ptr zone = static_cast<Zone::Ptr>(row);
+
+       if (!zone)
+               return Empty;
+
+       Zone::Ptr parent_zone = zone->GetParent();
+
+       if (!parent_zone)
+               return Empty;
+
+       return parent_zone->GetName();
+}
+
+Value ZonesTable::EndpointsAccessor(const Value& row)
+{
+       Zone::Ptr zone = static_cast<Zone::Ptr>(row);
+
+       if (!zone)
+               return Empty;
+
+       std::set<Endpoint::Ptr> endpoints = zone->GetEndpoints();
+
+       Array::Ptr endpoint_names = new Array();
+
+       BOOST_FOREACH(const Endpoint::Ptr endpoint, endpoints) {
+               endpoint_names->Add(endpoint->GetName());
+       }
+
+       if (!endpoint_names)
+               return Empty;
+
+       return endpoint_names;
+}
+
+Value ZonesTable::GlobalAccessor(const Value& row)
+{
+       Zone::Ptr zone = static_cast<Zone::Ptr>(row);
+
+       if (!zone)
+               return Empty;
+
+       return zone->GetGlobal() ? 1 : 0;
+}
diff --git a/lib/livestatus/zonestable.hpp b/lib/livestatus/zonestable.hpp
new file mode 100644 (file)
index 0000000..ab9b81a
--- /dev/null
@@ -0,0 +1,57 @@
+/******************************************************************************
+ * 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 ZONESTABLE_H
+#define ZONESTABLE_H
+
+#include "livestatus/table.hpp"
+
+using namespace icinga;
+
+namespace icinga
+{
+
+/**
+ * @ingroup livestatus
+ */
+class I2_LIVESTATUS_API ZonesTable : public Table
+{
+public:
+       DECLARE_PTR_TYPEDEFS(ZonesTable);
+
+       ZonesTable(void);
+
+       static void AddColumns(Table *table, const String& prefix = String(),
+           const Column::ObjectAccessor& objectAccessor = Column::ObjectAccessor());
+
+       virtual String GetName(void) const;
+       virtual String GetPrefix(void) const;
+
+protected:
+       virtual void FetchRows(const AddRowFunction& addRowFn);
+
+       static Value NameAccessor(const Value& row);
+       static Value ParentAccessor(const Value& row);
+       static Value EndpointsAccessor(const Value& row);
+       static Value GlobalAccessor(const Value& row);
+};
+
+}
+
+#endif /* ZONESTABLE_H */