1 /* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
3 #include "livestatus/zonestable.hpp"
4 #include "remote/zone.hpp"
5 #include "base/configtype.hpp"
7 using namespace icinga;
9 ZonesTable::ZonesTable()
14 void ZonesTable::AddColumns(Table *table, const String& prefix,
15 const Column::ObjectAccessor& objectAccessor)
17 table->AddColumn(prefix + "name", Column(&ZonesTable::NameAccessor, objectAccessor));
18 table->AddColumn(prefix + "parent", Column(&ZonesTable::ParentAccessor, objectAccessor));
19 table->AddColumn(prefix + "endpoints", Column(&ZonesTable::EndpointsAccessor, objectAccessor));
20 table->AddColumn(prefix + "global", Column(&ZonesTable::GlobalAccessor, objectAccessor));
23 String ZonesTable::GetName() const
28 String ZonesTable::GetPrefix() const
33 void ZonesTable::FetchRows(const AddRowFunction& addRowFn)
35 for (const Zone::Ptr& zone : ConfigType::GetObjectsByType<Zone>()) {
36 if (!addRowFn(zone, LivestatusGroupByNone, Empty))
41 Value ZonesTable::NameAccessor(const Value& row)
43 Zone::Ptr zone = static_cast<Zone::Ptr>(row);
48 return zone->GetName();
51 Value ZonesTable::ParentAccessor(const Value& row)
53 Zone::Ptr zone = static_cast<Zone::Ptr>(row);
58 Zone::Ptr parent_zone = zone->GetParent();
63 return parent_zone->GetName();
66 Value ZonesTable::EndpointsAccessor(const Value& row)
68 Zone::Ptr zone = static_cast<Zone::Ptr>(row);
73 std::set<Endpoint::Ptr> endpoints = zone->GetEndpoints();
77 for (const Endpoint::Ptr& endpoint : endpoints) {
78 result.push_back(endpoint->GetName());
81 return new Array(std::move(result));
84 Value ZonesTable::GlobalAccessor(const Value& row)
86 Zone::Ptr zone = static_cast<Zone::Ptr>(row);
91 return zone->GetGlobal() ? 1 : 0;