1 /******************************************************************************
3 * Copyright (C) 2012 Icinga Development Team (http://www.icinga.org/) *
5 * This program is free software; you can redistribute it and/or *
6 * modify it under the terms of the GNU General Public License *
7 * as published by the Free Software Foundation; either version 2 *
8 * of the License, or (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the Free Software Foundation *
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
18 ******************************************************************************/
20 #include "livestatus/servicestable.h"
21 #include "livestatus/hoststable.h"
22 #include "icinga/service.h"
23 #include "base/dynamictype.h"
24 #include <boost/foreach.hpp>
26 using namespace icinga;
27 using namespace livestatus;
29 ServicesTable::ServicesTable(void)
34 void ServicesTable::AddColumns(Table *table, const String& prefix,
35 const Column::ObjectAccessor& objectAccessor)
37 table->AddColumn(prefix + "description", Column(&ServicesTable::ShortNameAccessor, objectAccessor));
38 table->AddColumn(prefix + "display_name", Column(&ServicesTable::DisplayNameAccessor, objectAccessor));
39 table->AddColumn(prefix + "check_command", Column(&Table::EmptyStringAccessor, objectAccessor));
40 table->AddColumn(prefix + "check_command_expanded", Column(&Table::EmptyStringAccessor, objectAccessor));
41 table->AddColumn(prefix + "event_handler", Column(&Table::EmptyStringAccessor, objectAccessor));
42 table->AddColumn(prefix + "plugin_output", Column(&Table::EmptyStringAccessor, objectAccessor));
43 table->AddColumn(prefix + "long_plugin_output", Column(&Table::EmptyStringAccessor, objectAccessor));
44 table->AddColumn(prefix + "perf_data", Column(&Table::EmptyStringAccessor, objectAccessor));
45 table->AddColumn(prefix + "notification_period", Column(&Table::EmptyStringAccessor, objectAccessor));
46 table->AddColumn(prefix + "check_period", Column(&Table::EmptyStringAccessor, objectAccessor));
47 table->AddColumn(prefix + "notes", Column(&Table::EmptyStringAccessor, objectAccessor));
48 table->AddColumn(prefix + "notes_expanded", Column(&Table::EmptyStringAccessor, objectAccessor));
49 table->AddColumn(prefix + "notes_url", Column(&Table::EmptyStringAccessor, objectAccessor));
50 table->AddColumn(prefix + "notes_url_expanded", Column(&Table::EmptyStringAccessor, objectAccessor));
51 table->AddColumn(prefix + "action_url", Column(&Table::EmptyStringAccessor, objectAccessor));
52 table->AddColumn(prefix + "action_url_expanded", Column(&Table::EmptyStringAccessor, objectAccessor));
53 table->AddColumn(prefix + "icon_image", Column(&Table::EmptyStringAccessor, objectAccessor));
54 table->AddColumn(prefix + "icon_image_expanded", Column(&Table::EmptyStringAccessor, objectAccessor));
55 table->AddColumn(prefix + "icon_image_alt", Column(&Table::EmptyStringAccessor, objectAccessor));
56 table->AddColumn(prefix + "initial_state", Column(&Table::EmptyStringAccessor, objectAccessor));
57 table->AddColumn(prefix + "max_check_attempts", Column(&Table::EmptyStringAccessor, objectAccessor));
58 table->AddColumn(prefix + "current_attempt", Column(&Table::EmptyStringAccessor, objectAccessor));
59 table->AddColumn(prefix + "state", Column(&Table::EmptyStringAccessor, objectAccessor));
60 table->AddColumn(prefix + "has_been_checked", Column(&Table::EmptyStringAccessor, objectAccessor));
61 table->AddColumn(prefix + "last_state", Column(&Table::EmptyStringAccessor, objectAccessor));
62 table->AddColumn(prefix + "last_hard_state", Column(&Table::EmptyStringAccessor, objectAccessor));
63 table->AddColumn(prefix + "state_type", Column(&Table::EmptyStringAccessor, objectAccessor));
64 table->AddColumn(prefix + "check_type", Column(&Table::EmptyStringAccessor, objectAccessor));
65 table->AddColumn(prefix + "acknowledged", Column(&Table::EmptyStringAccessor, objectAccessor));
66 table->AddColumn(prefix + "acknowledgement_type", Column(&Table::EmptyStringAccessor, objectAccessor));
67 table->AddColumn(prefix + "no_more_notifications", Column(&Table::EmptyStringAccessor, objectAccessor));
68 table->AddColumn(prefix + "last_state_change", Column(&Table::EmptyStringAccessor, objectAccessor));
69 table->AddColumn(prefix + "last_time_ok", Column(&Table::EmptyStringAccessor, objectAccessor));
70 table->AddColumn(prefix + "last_time_warning", Column(&Table::EmptyStringAccessor, objectAccessor));
71 table->AddColumn(prefix + "last_time_critical", Column(&Table::EmptyStringAccessor, objectAccessor));
72 table->AddColumn(prefix + "last_time_unknown", Column(&Table::EmptyStringAccessor, objectAccessor));
73 table->AddColumn(prefix + "last_check", Column(&Table::EmptyStringAccessor, objectAccessor));
74 table->AddColumn(prefix + "next_check", Column(&Table::EmptyStringAccessor, objectAccessor));
75 table->AddColumn(prefix + "last_notification", Column(&Table::EmptyStringAccessor, objectAccessor));
76 table->AddColumn(prefix + "next_notification", Column(&Table::EmptyStringAccessor, objectAccessor));
77 table->AddColumn(prefix + "current_notification_number", Column(&Table::EmptyStringAccessor, objectAccessor));
78 table->AddColumn(prefix + "last_state_change", Column(&Table::EmptyStringAccessor, objectAccessor));
79 table->AddColumn(prefix + "last_hard_state_change", Column(&Table::EmptyStringAccessor, objectAccessor));
80 table->AddColumn(prefix + "scheduled_downtime_depth", Column(&Table::EmptyStringAccessor, objectAccessor));
81 table->AddColumn(prefix + "is_flapping", Column(&Table::EmptyStringAccessor, objectAccessor));
82 table->AddColumn(prefix + "checks_enabled", Column(&Table::EmptyStringAccessor, objectAccessor));
83 table->AddColumn(prefix + "accept_passive_checks", Column(&Table::EmptyStringAccessor, objectAccessor));
84 table->AddColumn(prefix + "event_handler_enabled", Column(&Table::EmptyStringAccessor, objectAccessor));
85 table->AddColumn(prefix + "notifications_enabled", Column(&Table::EmptyStringAccessor, objectAccessor));
86 table->AddColumn(prefix + "process_performance_data", Column(&Table::EmptyStringAccessor, objectAccessor));
87 table->AddColumn(prefix + "is_executing", Column(&Table::EmptyStringAccessor, objectAccessor));
88 table->AddColumn(prefix + "active_checks_enabled", Column(&Table::EmptyStringAccessor, objectAccessor));
89 table->AddColumn(prefix + "check_options", Column(&Table::EmptyStringAccessor, objectAccessor));
90 table->AddColumn(prefix + "flap_detection_enabled", Column(&Table::EmptyStringAccessor, objectAccessor));
91 table->AddColumn(prefix + "check_freshness", Column(&Table::EmptyStringAccessor, objectAccessor));
92 table->AddColumn(prefix + "obsess_over_service", Column(&Table::EmptyStringAccessor, objectAccessor));
93 table->AddColumn(prefix + "modified_attributes", Column(&Table::EmptyStringAccessor, objectAccessor));
94 table->AddColumn(prefix + "modified_attributes_list", Column(&Table::EmptyStringAccessor, objectAccessor));
95 table->AddColumn(prefix + "pnpgraph_present", Column(&Table::EmptyStringAccessor, objectAccessor));
96 table->AddColumn(prefix + "check_interval", Column(&Table::EmptyStringAccessor, objectAccessor));
97 table->AddColumn(prefix + "retry_interval", Column(&Table::EmptyStringAccessor, objectAccessor));
98 table->AddColumn(prefix + "notification_interval", Column(&Table::EmptyStringAccessor, objectAccessor));
99 table->AddColumn(prefix + "first_notification_delay", Column(&Table::EmptyStringAccessor, objectAccessor));
100 table->AddColumn(prefix + "low_flap_threshold", Column(&Table::EmptyStringAccessor, objectAccessor));
101 table->AddColumn(prefix + "high_flap_threshold", Column(&Table::EmptyStringAccessor, objectAccessor));
102 table->AddColumn(prefix + "latency", Column(&Table::EmptyStringAccessor, objectAccessor));
103 table->AddColumn(prefix + "execution_time", Column(&Table::EmptyStringAccessor, objectAccessor));
104 table->AddColumn(prefix + "percent_state_change", Column(&Table::EmptyStringAccessor, objectAccessor));
105 table->AddColumn(prefix + "in_check_period", Column(&Table::EmptyStringAccessor, objectAccessor));
106 table->AddColumn(prefix + "in_notification_period", Column(&Table::EmptyStringAccessor, objectAccessor));
107 table->AddColumn(prefix + "contacts", Column(&Table::EmptyStringAccessor, objectAccessor));
108 table->AddColumn(prefix + "downtimes", Column(&Table::EmptyStringAccessor, objectAccessor));
109 table->AddColumn(prefix + "downtimes_with_info", Column(&Table::EmptyStringAccessor, objectAccessor));
110 table->AddColumn(prefix + "comments", Column(&Table::EmptyStringAccessor, objectAccessor));
111 table->AddColumn(prefix + "comments_with_info", Column(&Table::EmptyStringAccessor, objectAccessor));
112 table->AddColumn(prefix + "comments_with_extra_info", Column(&Table::EmptyStringAccessor, objectAccessor));
113 table->AddColumn(prefix + "host_", Column(&Table::EmptyStringAccessor, objectAccessor));
114 table->AddColumn(prefix + "custom_variable_names", Column(&Table::EmptyStringAccessor, objectAccessor));
115 table->AddColumn(prefix + "custom_variable_values", Column(&Table::EmptyStringAccessor, objectAccessor));
116 table->AddColumn(prefix + "custom_variables", Column(&Table::EmptyStringAccessor, objectAccessor));
117 table->AddColumn(prefix + "groups", Column(&Table::EmptyStringAccessor, objectAccessor));
118 table->AddColumn(prefix + "contact_groups", Column(&Table::EmptyStringAccessor, objectAccessor));
120 HostsTable::AddColumns(table, "host_", &ServicesTable::HostAccessor);
123 String ServicesTable::GetName(void) const
128 void ServicesTable::FetchRows(const AddRowFunction& addRowFn)
130 BOOST_FOREACH(const DynamicObject::Ptr& object, DynamicType::GetObjects("Service")) {
135 Object::Ptr ServicesTable::HostAccessor(const Object::Ptr& object)
137 return static_pointer_cast<Service>(object)->GetHost();
140 Value ServicesTable::ShortNameAccessor(const Object::Ptr& object)
142 return static_pointer_cast<Service>(object)->GetShortName();
145 Value ServicesTable::DisplayNameAccessor(const Object::Ptr& object)
147 return static_pointer_cast<Service>(object)->GetDisplayName();