1 /* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
2
3 #include "livestatus/zonestable.hpp"
4 #include "remote/zone.hpp"
5 #include "base/configtype.hpp"
6
7 using namespace icinga;
8
ZonesTable()9 ZonesTable::ZonesTable()
10 {
11 AddColumns(this);
12 }
13
AddColumns(Table * table,const String & prefix,const Column::ObjectAccessor & objectAccessor)14 void ZonesTable::AddColumns(Table *table, const String& prefix,
15 const Column::ObjectAccessor& objectAccessor)
16 {
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));
21 }
22
GetName() const23 String ZonesTable::GetName() const
24 {
25 return "zones";
26 }
27
GetPrefix() const28 String ZonesTable::GetPrefix() const
29 {
30 return "zone";
31 }
32
FetchRows(const AddRowFunction & addRowFn)33 void ZonesTable::FetchRows(const AddRowFunction& addRowFn)
34 {
35 for (const Zone::Ptr& zone : ConfigType::GetObjectsByType<Zone>()) {
36 if (!addRowFn(zone, LivestatusGroupByNone, Empty))
37 return;
38 }
39 }
40
NameAccessor(const Value & row)41 Value ZonesTable::NameAccessor(const Value& row)
42 {
43 Zone::Ptr zone = static_cast<Zone::Ptr>(row);
44
45 if (!zone)
46 return Empty;
47
48 return zone->GetName();
49 }
50
ParentAccessor(const Value & row)51 Value ZonesTable::ParentAccessor(const Value& row)
52 {
53 Zone::Ptr zone = static_cast<Zone::Ptr>(row);
54
55 if (!zone)
56 return Empty;
57
58 Zone::Ptr parent_zone = zone->GetParent();
59
60 if (!parent_zone)
61 return Empty;
62
63 return parent_zone->GetName();
64 }
65
EndpointsAccessor(const Value & row)66 Value ZonesTable::EndpointsAccessor(const Value& row)
67 {
68 Zone::Ptr zone = static_cast<Zone::Ptr>(row);
69
70 if (!zone)
71 return Empty;
72
73 std::set<Endpoint::Ptr> endpoints = zone->GetEndpoints();
74
75 ArrayData result;
76
77 for (const Endpoint::Ptr& endpoint : endpoints) {
78 result.push_back(endpoint->GetName());
79 }
80
81 return new Array(std::move(result));
82 }
83
GlobalAccessor(const Value & row)84 Value ZonesTable::GlobalAccessor(const Value& row)
85 {
86 Zone::Ptr zone = static_cast<Zone::Ptr>(row);
87
88 if (!zone)
89 return Empty;
90
91 return zone->GetGlobal() ? 1 : 0;
92 }
93