diff options
Diffstat (limited to 'lib/livestatus/zonestable.cpp')
-rw-r--r-- | lib/livestatus/zonestable.cpp | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/lib/livestatus/zonestable.cpp b/lib/livestatus/zonestable.cpp new file mode 100644 index 0000000..d86cc72 --- /dev/null +++ b/lib/livestatus/zonestable.cpp @@ -0,0 +1,92 @@ +/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */ + +#include "livestatus/zonestable.hpp" +#include "remote/zone.hpp" +#include "base/configtype.hpp" + +using namespace icinga; + +ZonesTable::ZonesTable() +{ + 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() const +{ + return "zones"; +} + +String ZonesTable::GetPrefix() const +{ + return "zone"; +} + +void ZonesTable::FetchRows(const AddRowFunction& addRowFn) +{ + for (const Zone::Ptr& zone : ConfigType::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(); + + ArrayData result; + + for (const Endpoint::Ptr& endpoint : endpoints) { + result.push_back(endpoint->GetName()); + } + + return new Array(std::move(result)); +} + +Value ZonesTable::GlobalAccessor(const Value& row) +{ + Zone::Ptr zone = static_cast<Zone::Ptr>(row); + + if (!zone) + return Empty; + + return zone->GetGlobal() ? 1 : 0; +} |