Updated testing for filter selects in reports
[ninja.git] / modules / orm / models / hostgroup.php
blob8ddc64a1ec334581de2ed7679ca61cf521a07859
1 <?php
3 require_once( dirname(__FILE__).'/base/basehostgroup.php' );
5 /**
6 * Describes a single object from livestatus
7 */
8 class HostGroup_Model extends BaseHostGroup_Model {
9 /**
10 * A list of column dependencies for custom columns
12 static public $rewrite_columns = array(
13 'host_stats' => array('name'),
14 'service_stats' => array('name')
17 /**
18 * Get statistics about the hosts in the group
20 public function get_host_stats() {
21 $set = HostPool_Model::all()->reduce_by('groups', $this->get_name(), '>=');
23 if (config::get('checks.show_passive_as_active', '*')) {
24 $active_checks = ObjectPool_Model::get_by_query('[hosts] active_checks_enabled = 1 or accept_passive_checks = 1');
25 $disabled_checks = ObjectPool_Model::get_by_query('[hosts] active_checks_enabled = 0 and accept_passive_checks = 0');
26 } else {
27 $active_checks = ObjectPool_Model::get_by_query('[hosts] active_checks_enabled = 1');
28 $disabled_checks = ObjectPool_Model::get_by_query('[hosts] active_checks_enabled = 0');
31 $all = ObjectPool_Model::get_by_query('[hosts] state!=999');
32 $pending = ObjectPool_Model::get_by_query('[hosts] has_been_checked=0');
33 $up = ObjectPool_Model::get_by_query('[hosts] state=0 and has_been_checked=1');
34 $down = ObjectPool_Model::get_by_query('[hosts] state=1 and has_been_checked=1');
35 $unreachable = ObjectPool_Model::get_by_query('[hosts] state=2 and has_been_checked=1');
37 $acknowledged = ObjectPool_Model::get_by_query('[hosts] acknowledged = 1');
38 $disabled_active = ObjectPool_Model::get_by_query('[hosts] check_type = 0')->intersect($disabled_checks);
39 $scheduled = ObjectPool_Model::get_by_query('[hosts] scheduled_downtime_depth > 0');
40 $unscheduled = ObjectPool_Model::get_by_query('[hosts] scheduled_downtime_depth = 0');
41 $unhandled = ObjectPool_Model::get_by_query('[hosts] acknowledged = 0 and scheduled_downtime_depth = 0')->intersect($active_checks);
43 $flapping = ObjectPool_Model::get_by_query('[hosts] is_flapping = 1' );
45 $stats = array(
46 'total' => $all,
47 'pending' => $pending,
48 'pending_and_disabled' => $pending->intersect($disabled_checks),
49 'pending_and_scheduled' => $pending->intersect($scheduled),
50 'up' => $up,
51 'up_and_disabled_active' => $up->intersect($disabled_active),
52 'up_and_scheduled' => $up->intersect($scheduled),
53 'down' => $down,
54 'down_and_ack' => $down->intersect($acknowledged),
55 'down_and_scheduled' => $down->intersect($scheduled),
56 'down_and_disabled_active' => $down->intersect($disabled_active),
57 'down_and_unhandled' => $down->intersect($unscheduled),
58 'unreachable' => $unreachable,
59 'unreachable_and_ack' => $unreachable->intersect($acknowledged),
60 'unreachable_and_scheduled' => $unreachable->intersect($scheduled),
61 'unreachable_and_disabled_active' => $unreachable->intersect($disabled_active),
62 'unreachable_and_unhandled' => $unreachable->intersect($unhandled)
65 $queries = array();
66 foreach( $stats as $name => $stat ) {
67 $queries[$name] = $set->intersect($stat)->get_query();
69 return array( 'stats' => $set->stats($stats), 'queries' => $queries );
72 /**
73 * Get statistics about the services in the group
75 public function get_service_stats() {
76 $set = ServicePool_Model::all()->reduce_by('host.groups', $this->get_name(), '>=');
78 if (config::get('checks.show_passive_as_active', '*')) {
79 $active_checks = ObjectPool_Model::get_by_query('[services] active_checks_enabled = 1 or accept_passive_checks = 1');
80 $disabled_checks = ObjectPool_Model::get_by_query('[services] active_checks_enabled = 0 and accept_passive_checks = 0');
81 } else {
82 $active_checks = ObjectPool_Model::get_by_query('[services] active_checks_enabled = 1');
83 $disabled_checks = ObjectPool_Model::get_by_query('[services] active_checks_enabled = 0');
86 $all = ObjectPool_Model::get_by_query('[services] state!=999');
87 $pending = ObjectPool_Model::get_by_query('[services] has_been_checked=0');
88 $ok = ObjectPool_Model::get_by_query('[services] state=0 and has_been_checked=1');
89 $warn = ObjectPool_Model::get_by_query('[services] state=1 and has_been_checked=1');
90 $critical = ObjectPool_Model::get_by_query('[services] state=2 and has_been_checked=1');
91 $unknown = ObjectPool_Model::get_by_query('[services] state=3 and has_been_checked=1');
93 $acknowledged = ObjectPool_Model::get_by_query('[services] acknowledged = 1');
94 $disabled_active = ObjectPool_Model::get_by_query('[services] check_type = 0')->intersect($disabled_checks);
95 $scheduled = ObjectPool_Model::get_by_query('[services] scheduled_downtime_depth > 0');
96 $unscheduled = ObjectPool_Model::get_by_query('[services] scheduled_downtime_depth = 0');
97 $unhandled = ObjectPool_Model::get_by_query('[services] acknowledged = 0 and scheduled_downtime_depth = 0')->intersect($active_checks);
99 $down_host = ObjectPool_Model::get_by_query('[services] host.state != 0');
101 $stats = array(
102 'ok' => $ok,
103 'warning' => $warn,
104 'warning_and_ack' => $warn->intersect($acknowledged),
105 'warning_and_disabled_active' => $warn->intersect($disabled_active),
106 'warning_and_scheduled' => $warn->intersect($scheduled),
107 'warning_and_unhandled' => $warn->intersect($unhandled),
108 'warning_on_down_host' => $warn->intersect($down_host),
109 'critical' => $critical,
110 'critical_and_ack' => $critical->intersect($acknowledged),
111 'critical_and_disabled_active' => $critical->intersect($disabled_active),
112 'critical_and_scheduled' => $critical->intersect($scheduled),
113 'critical_and_unhandled' => $critical->intersect($unhandled),
114 'critical_on_down_host' => $critical->intersect($down_host),
115 'unknown' => $unknown,
116 'unknown_and_ack' => $unknown->intersect($acknowledged),
117 'unknown_and_disabled_active' => $unknown->intersect($disabled_active),
118 'unknown_and_scheduled' => $unknown->intersect($scheduled),
119 'unknown_and_unhandled' => $unknown->intersect($unhandled),
120 'unknown_on_down_host' => $unknown->intersect($down_host),
121 'pending' => $pending
125 $queries = array();
126 foreach( $stats as $name => $stat ) {
127 $queries[$name] = $set->intersect($stat)->get_query();
129 return array( 'stats' => $set->stats($stats), 'queries' => $queries );