histogram: Make histograms crash less
[ninja.git] / application / controllers / extinfo.php
blobdf43aa0c3240c22991aa2edfa15b4ad9b598b741
1 <?php defined('SYSPATH') OR die('No direct access allowed.');
2 /**
3 * Extinfo controller
5 * op5, and the op5 logo are trademarks, servicemarks, registered servicemarks
6 * or registered trademarks of op5 AB.
7 * All other trademarks, servicemarks, registered trademarks, and registered
8 * servicemarks mentioned herein may be the property of their respective owner(s).
9 * The information contained herein is provided AS IS with NO WARRANTY OF ANY
10 * KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY, AND FITNESS FOR A
11 * PARTICULAR PURPOSE.
13 class Extinfo_Controller extends Authenticated_Controller {
14 public $current = false;
16 /**
17 * Default controller method
18 * Redirects to show_process_info() which
19 * is the equivalent of calling extinfo.cgi?type=0
21 public function index()
23 return url::redirect(Router::$controller.'/show_process_info');
26 /**
27 * @param $type string = host
28 * @param $host boolean = false
29 * @param $service boolean = false
31 public function details($type='host', $host=false, $service=false)
33 $host = $this->input->get('host', $host);
34 $service = $this->input->get('service', $service);
35 $hostgroup = $this->input->get('hostgroup', false);
36 $servicegroup = $this->input->get('servicegroup', false);
38 $this->template->title = 'Monitoring » Extinfo';
40 # load current status for host/service status totals
41 //$this->current = new Current_status_Model();
43 $host = trim($host);
44 $service = trim($service);
45 $hostgroup = trim($hostgroup);
46 $servicegroup = trim($servicegroup);
48 $ls = Livestatus::instance();
49 if(!empty($host) && empty($service)) {
50 $set = HostPool_Model::all()->reduce_by('name', $host, '=');
52 else if(!empty($host) && !empty($service)) {
53 $set = ServicePool_Model::all()
54 ->reduce_by('host.name', $host, '=')
55 ->reduce_by('description', $service, '=');
56 $type = 'service';
58 else if(!empty($hostgroup)) {
59 return $this->group_details('hostgroup', $hostgroup);
61 else if(!empty($servicegroup)) {
62 return $this->group_details('servicegroup', $servicegroup);
64 else {
65 return false;
68 $this->template->content = $this->add_view('extinfo/index');
69 $this->js_strings .= "var _pnp_web_path = '".Kohana::config('config.pnp4nagios_path')."';\n";
70 $this->template->js_strings = $this->js_strings;
71 $this->xtra_js[] = $this->add_path('extinfo/js/extinfo.js');
73 // Widgets
74 $this->template->content->widgets = array();
75 $this->xtra_js[] = $this->add_path('/js/widgets.js');
77 # save us some typing
78 $content = $this->template->content;
80 if (count($set) != 1) {
81 return url::redirect('extinfo/unauthorized/'.$type);
83 $it = $set->it(false, array(), 1, 0);
84 $object = $it->current();
86 $content->object = $object;
88 $username = Auth::instance()->get_user()->username;
90 $setting = array(
91 'query'=>$set->get_comments()->get_query(),
92 'columns'=>'all, -host_state, -host_name, -service_state, -service_description'
94 $model = new Ninja_widget_Model(array(
95 'page' => Router::$controller,
96 'name' => 'listview',
97 'widget' => 'listview',
98 'username' => $username,
99 'friendly_name' => 'Comments',
100 'setting' => $setting
103 $widget = widget::get($model, $this);
104 widget::set_resources($widget, $this);
106 $widget->set_fixed($set->get_comments()->get_query());
107 $widget->extra_data_attributes['text-if-empty'] = _("No comments yet");
109 $this->template->content->comments = $widget->render();
111 if ($object->get_scheduled_downtime_depth()) {
112 $setting = array(
113 'query'=>$set->get_downtimes()->get_query(),
114 'columns'=>'all, -host_state, -host_name, -service_state, -service_description'
116 $model = new Ninja_widget_Model(array(
117 'page' => Router::$controller,
118 'name' => 'listview',
119 'widget' => 'listview',
120 'username' => $username,
121 'friendly_name' => 'Downtimes',
122 'setting' => $setting
125 $widget = widget::get($model, $this);
126 widget::set_resources($widget, $this);
128 $widget->set_fixed($set->get_downtimes()->get_query());
130 $this->template->content->downtimes = $widget->render();
133 $this->template->inline_js = $this->inline_js;
135 if (nagioscmd::is_authorized_for(array('host_name' => $host, 'service' => $service)) === true) {
136 $this->template->content->commands = $this->add_view('extinfo/commands');
137 $this->template->content->commands->set = $set;
138 } else {
139 $this->template->content->commands = $this->add_view('extinfo/not_running');
140 $this->template->content->commands->info_message = _("You're not authorized to run commands");
143 $this->template->toolbar = new Toolbar_Controller();
144 $toolbar = &$this->template->toolbar;
146 # create page links
147 switch ($type) {
148 case 'host':
150 $toolbar->title = "Host";
152 if ( $object->get_icon_image() ) {
154 $attributes = array(
155 'alt' => $object->get_icon_image_alt(),
156 'title' => $object->get_icon_image_alt(),
157 'style' => 'width: 16px; vertical-align: middle; display: inline-block; margin-right: 4px'
160 $logos_path = Kohana::config('config.logos_path');
161 $logos_path.= substr($logos_path, -1) == '/' ? '' : '/';
162 $toolbar->subtitle = html::image( $logos_path.$object->get_icon_image(), $attributes ) . " " . $object->get_display_name();
164 } else {
166 $toolbar->subtitle = $object->get_display_name();
170 $toolbar->info( html::anchor( listview::link('services',array('host.name'=>$host)) , _('Status detail') ) );
171 $toolbar->info( html::anchor( 'alert_history/generate?include_long_output=1&amp;report_type=hosts&amp;objects[]='.urlencode($host) , _('Alert history') ) );
172 $toolbar->info( html::anchor( 'showlog/showlog?hide_initial=1&amp;hide_process=1&amp;hide_logrotation=1&amp;hide_commands=1&amp;host_state_options[d]=1&amp;host_state_options[u]=1&amp;host_state_options[r]=1&amp;host[]='.urlencode($host) , _('Event log') ) );
173 $toolbar->info( html::anchor( 'histogram/generate?report_type=hosts&amp;objects[]='.urlencode($host) , _('Alert histogram') ) );
174 $toolbar->info( html::anchor( 'avail/generate/?report_type=hosts&amp;objects[]='.urlencode($host) , _('Availability report') ) );
175 $toolbar->info( html::anchor( listview::link('notifications',array('host_name'=>$host)) , _('Notifications') ) );
177 break;
178 case 'service':
180 $toolbar->title = "Service";
181 $toolbar->subtitle = $object->get_display_name();
183 $toolbar->info( html::anchor( 'extinfo/details?host='.urlencode($host) , _('Information for host') ) );
184 $toolbar->info( html::anchor( listview::link('services',array('host.name'=>$host)) , _('Status detail for host') ) );
185 $toolbar->info( html::anchor( 'alert_history/generate?include_long_output=1&amp;report_type=services&amp;objects[]='.$host.';'.urlencode($service) , _('Alert history') ) );
186 $toolbar->info( html::anchor( 'showlog/showlog?hide_initial=1&amp;hide_process=1&amp;hide_logrotation=1&amp;hide_commands=1&amp;service_state_options[w]=1&amp;service_state_options[u]=1&amp;service_state_options[c]=1&amp;service_state_options[r]=1&amp;service[]='.urlencode($host).';'.urlencode($service), _('Event log') ) );
187 $toolbar->info( html::anchor( 'histogram/generate?report_type=services&amp;objects[]='.$host.';'.urlencode($service) , _('Alert histogram') ) );
188 $toolbar->info( html::anchor( 'avail/generate/?report_type=services&amp;objects[]='.$host.';'.urlencode($service).'&report_type=services' , _('Availability report') ) );
189 $toolbar->info( html::anchor( listview::link('notifications',array('host_name'=>$host, 'service_description'=>$service)) , _('Notifications') ) );
191 break;
193 if (isset($page_links)) {
194 $this->template->content->page_links = $page_links;
195 $this->template->content->label_view_for = _("for this $type");
200 * Show Nagios process info
202 public function show_process_info()
204 if (!Auth::instance()->authorized_for('system_information')) {
205 return url::redirect('extinfo/unauthorized/0');
208 $this->template->content = $this->add_view('extinfo/process_info');
210 $this->template->toolbar = new Toolbar_Controller( _("Process Information") );
211 $this->template->title = _('Monitoring » Process info');
213 # save us some typing
214 $content = $this->template->content;
215 $content->info = array();
217 # Lables to translate
218 $na_str = _('N/A');
219 $yes = _('YES');
220 $no = _('NO');
222 $date_format_str = nagstat::date_format();
223 $content->date_format_str = $date_format_str;
225 # fetch program status from program_status_model; uses ORM
226 $status = Current_status_Model::instance()->program_status();
227 $content->program_status = $status;
229 $commands->label_shutdown_nagios = sprintf(_('Shutdown the %s process'), Kohana::config('config.product_name'));
230 $commands->label_restart_nagios = sprintf(_('Restart the %s process'), Kohana::config('config.product_name'));
232 $content->info[] = array(
233 "title" => "Program version",
234 "value" => $status->program_version,
235 "command" => array(
236 nagioscmd::command_ajax_button(nagioscmd::command_id('SHUTDOWN_PROCESS'), $commands->label_shutdown_nagios),
237 nagioscmd::command_ajax_button(nagioscmd::command_id('RESTART_PROCESS'), $commands->label_restart_nagios)
241 $content->info[] = array( "title" => "Program Starttime", "value" => date($date_format_str, $status->program_start) );
242 $content->info[] = array( "title" => "Running Time", "value" => time::to_string(time() - $status->program_start ) );
243 $content->info[] = array( "title" => "Last logfile rotation", "value" => $status->last_log_rotation ? date($date_format_str, $status->last_log_rotation) : 'never' );
244 $content->info[] = array( "title" => "Nagios PID", "value" => $status->nagios_pid );
246 $content->info[] = array(
247 "title" => _("Notifications enabled?"),
248 "command" => nagioscmd::command_ajax_button(
249 ($status->enable_notifications) ? nagioscmd::command_id('DISABLE_NOTIFICATIONS') : nagioscmd::command_id('ENABLE_NOTIFICATIONS'),
250 ($status->enable_notifications) ? _('Disable notifications') : _('Enable notifications'),
251 false, $status->enable_notifications
255 $content->info[] = array(
256 "title" => _("Service checks being executed?"),
257 "command" => nagioscmd::command_ajax_button(
258 ($status->execute_service_checks) ? nagioscmd::command_id('STOP_EXECUTING_SVC_CHECKS') : nagioscmd::command_id('START_EXECUTING_SVC_CHECKS'),
259 ($status->execute_service_checks) ? _('Stop executing service checks') : _('Start executing service checks'),
260 false, $status->execute_service_checks
264 $content->info[] = array(
265 "title" => _("Passive service checks being accepted?"),
266 "command" => nagioscmd::command_ajax_button(
267 ($status->accept_passive_service_checks) ? nagioscmd::command_id('STOP_ACCEPTING_PASSIVE_SVC_CHECKS') : nagioscmd::command_id('START_ACCEPTING_PASSIVE_SVC_CHECKS'),
268 ($status->accept_passive_service_checks) ? _('Stop accepting passive service checks') : _('Start accepting passive service checks'),
269 false, $status->accept_passive_service_checks
273 $content->info[] = array(
274 "title" => _("Host checks being executed?"),
275 "command" => nagioscmd::command_ajax_button(
276 ($status->execute_host_checks) ? nagioscmd::command_id('STOP_EXECUTING_HOST_CHECKS') : nagioscmd::command_id('START_EXECUTING_HOST_CHECKS'),
277 ($status->execute_host_checks) ? _('Stop executing host checks') : _('Start executing host checks'),
278 false, $status->execute_host_checks
282 $content->info[] = array(
283 "title" => _("Passive host checks being accepted?"),
284 "command" => nagioscmd::command_ajax_button(
285 ($status->accept_passive_host_checks) ? nagioscmd::command_id('STOP_ACCEPTING_PASSIVE_HOST_CHECKS') : nagioscmd::command_id('START_ACCEPTING_PASSIVE_HOST_CHECKS'),
286 ($status->accept_passive_host_checks) ? _('Stop accepting passive host checks') : _('Start accepting passive host checks'),
287 false, $status->accept_passive_host_checks
291 $content->info[] = array(
292 "title" => _("Event handlers enabled?"),
293 "command" => nagioscmd::command_ajax_button(
294 ($status->enable_event_handlers) ? nagioscmd::command_id('DISABLE_EVENT_HANDLERS') : nagioscmd::command_id('ENABLE_EVENT_HANDLERS'),
295 ($status->enable_event_handlers) ? _('Disable event handlers') : _('Enable event handlers'),
296 false, $status->enable_event_handlers
300 $content->info[] = array(
301 "title" => _("Obsessing over services?"),
302 "command" => nagioscmd::command_ajax_button(
303 ($status->obsess_over_services) ? nagioscmd::command_id('STOP_OBSESSING_OVER_SVC_CHECKS') : nagioscmd::command_id('START_OBSESSING_OVER_SVC_CHECKS'),
304 ($status->obsess_over_services) ? _('Stop obsessing over services') : _('Start obsessing over services'),
305 false, $status->obsess_over_services
309 $content->info[] = array(
310 "title" => _('Obsessing over hosts?'),
311 "command" => nagioscmd::command_ajax_button(
312 ($status->obsess_over_hosts) ? nagioscmd::command_id('STOP_OBSESSING_OVER_HOST_CHECKS') : nagioscmd::command_id('START_OBSESSING_OVER_HOST_CHECKS'),
313 ($status->obsess_over_hosts) ? _('Stop obsessing over hosts') : _('Start obsessing over hosts'),
314 false, $status->obsess_over_hosts
318 $content->info[] = array(
319 "title" => _('Flap detection enabled?'),
320 "command" => nagioscmd::command_ajax_button(
321 ($status->enable_flap_detection) ? nagioscmd::command_id('DISABLE_FLAP_DETECTION') : nagioscmd::command_id('ENABLE_FLAP_DETECTION'),
322 ($status->enable_flap_detection) ? _('Disable flap detection') : _('Enable flap detection'),
323 false, $status->enable_flap_detection
327 $content->info[] = array(
328 "title" => _('Performance data being processed?'),
329 "command" => nagioscmd::command_ajax_button(
330 ($status->process_performance_data) ? nagioscmd::command_id('DISABLE_PERFORMANCE_DATA') : nagioscmd::command_id('ENABLE_PERFORMANCE_DATA'),
331 ($status->process_performance_data) ? _('Disable performance data') : _('Enable performance data'),
332 false, $status->process_performance_data
339 * Display message to user when they lack proper
340 * credentials to view info on an object
342 public function unauthorized($type='host')
344 $type = trim(strtolower($type));
345 $this->template->content = $this->add_view('unauthorized');
346 $this->template->disable_refresh = true;
348 $this->template->content->error_description = _('If you believe this is an error, check the authorization requirements for accessing this page and your given authorization points.');
349 switch ($type) {
350 case 'host':
351 $this->template->content->error_message = _('It appears as though you do not have permission to view information for this host or it doesn\'t exist...');
352 break;
353 case 'hostgroup':
354 $this->template->content->error_message = _('It appears as though you do not have permission to view information for this hostgroup or it doesn\'t exist...');
355 break;
356 case 'servicegroup':
357 $this->template->content->error_message = _('It appears as though you do not have permission to view information for this servicegroup or it doesn\'t exist...');
358 break;
359 case 'service':
360 $this->template->content->error_message = _('It appears as though you do not have permission to view information for this service or it doesn\'t exist...');
361 break;
362 default:
363 $this->template->content->error_message = _('It appears as though you do not have permission to view process information...');
368 * Display extinfo for host- and servicegroups
371 public function group_details($grouptype='servicegroup', $group=false)
373 $grouptype = $this->input->get('grouptype', $grouptype);
374 $group = $this->input->get('group', $group);
375 if (empty($group)) {
376 $this->template->content = $this->add_view('error');
377 $this->template->content->error_message = _("Error: No group name specified");
378 return;
381 $this->js_strings .= "var _pnp_web_path = '".Kohana::config('config.pnp4nagios_path')."';\n";
382 $this->template->js_strings = $this->js_strings;
383 $this->xtra_js[] = $this->add_path('extinfo/js/extinfo.js');
385 $this->template->title = _('Monitoring » Group detail');
387 $ls = Livestatus::instance();
389 $group_info_res = $grouptype == 'servicegroup' ?
390 $ls->getServicegroups(array('filter' => array('name' => $group))) :
391 $ls->getHostgroups(array('filter' => array('name' => $group)));
393 if ($group_info_res === false || count($group_info_res)==0) {
394 $this->template->content = $this->add_view('error');
395 $this->template->content->error_message = sprintf(_("The requested %s ('%s') wasn't found"), $grouptype, $group);
396 return;
397 } else {
398 $group_info_res = (object)$group_info_res[0];
400 $this->template->content = $this->add_view('extinfo/groups');
401 $content = $this->template->content;
403 $content->label_grouptype = $grouptype=='servicegroup' ? _('servicegroup') : _('hostgroup');
404 $content->group_alias = $group_info_res->alias;
405 $content->groupname = $group;
406 $content->grouptype = $grouptype;
407 $content->cmd_schedule_downtime_hosts = nagioscmd::command_id('SCHEDULE_'.strtoupper($grouptype).'_HOST_DOWNTIME');
408 $content->cmd_schedule_downtime_services = nagioscmd::command_id('SCHEDULE_'.strtoupper($grouptype).'_SVC_DOWNTIME');
409 $content->cmd_enable_notifications_hosts = nagioscmd::command_id('ENABLE_'.strtoupper($grouptype).'_HOST_NOTIFICATIONS');
410 $content->cmd_disable_notifications_hosts = nagioscmd::command_id('DISABLE_'.strtoupper($grouptype).'_HOST_NOTIFICATIONS');
411 $content->cmd_disable_notifications_services = nagioscmd::command_id('DISABLE_'.strtoupper($grouptype).'_SVC_NOTIFICATIONS');
412 $content->cmd_enable_notifications_services = nagioscmd::command_id('ENABLE_'.strtoupper($grouptype).'_SVC_NOTIFICATIONS');
413 $content->cmd_disable_active_svc_checks = nagioscmd::command_id('DISABLE_'.strtoupper($grouptype).'_SVC_CHECKS');
414 $content->cmd_enable_active_svc_checks = nagioscmd::command_id('ENABLE_'.strtoupper($grouptype).'_SVC_CHECKS');
416 $content->cmd_disable_active_host_checks = nagioscmd::command_id('DISABLE_'.strtoupper($grouptype).'_HOST_CHECKS');
417 $content->cmd_enable_active_host_checks = nagioscmd::command_id('ENABLE_'.strtoupper($grouptype).'_HOST_CHECKS');
419 $content->notes_url = $group_info_res->notes_url !='' ? nagstat::process_macros($group_info_res->notes_url, $group_info_res, $grouptype) : false;
420 $content->action_url =$group_info_res->action_url !='' ? nagstat::process_macros($group_info_res->action_url, $group_info_res, $grouptype) : false;
421 $content->notes = $group_info_res->notes !='' ? nagstat::process_macros($group_info_res->notes, $group_info_res, $grouptype) : false;
423 $this->template->toolbar = new Toolbar_Controller( );
424 $toolbar = &$this->template->toolbar;
426 switch ($grouptype) {
427 case 'servicegroup':
429 $toolbar->title = "Servicegroup";
430 $toolbar->subtitle = security::xss_clean( $content->group_alias );
432 $label_view_for = _('for this servicegroup');
433 $toolbar->info( html::anchor( 'status/service/'.$group.'?group_type='.$grouptype , _('Status detail') ) );
434 $toolbar->info( html::anchor( 'status/'.$grouptype.'/'.$group , _('Status overview') ) );
435 $toolbar->info( html::anchor( 'avail/generate/?report_type='.$grouptype.'s&'.$grouptype.'[]='.$group , _('Availability') ) );
436 $toolbar->info( html::anchor( 'alert_history/generate?include_long_output=1&amp;'.$grouptype.'[]='.$group , _('Alert history') ) );
438 break;
439 case 'hostgroup':
441 $toolbar->title = "Hostgroup";
442 $toolbar->subtitle = security::xss_clean( $content->group_alias );
444 $label_view_for = _('for this hostgroup');
445 $toolbar->info( html::anchor( 'status/service/'.$group.'?group_type='.$grouptype , _('Status detail') ) );
446 $toolbar->info( html::anchor( 'status/'.$grouptype.'/'.$group , _('Status overview') ) );
447 $toolbar->info( html::anchor( 'avail/generate/?report_type='.$grouptype.'s&'.$grouptype.'[]='.$group , _('Availability') ) );
448 $toolbar->info( html::anchor( 'alert_history/generate?include_long_output=1&amp;'.$grouptype.'[]='.$group , _('Alert history') ) );
450 break;
452 if (isset($page_links)) {
453 $content->page_links = $page_links;
454 $content->label_view_for = $label_view_for;
460 * Show Program-Wide Performance Information
461 * (Performance Info)
463 public function performance()
465 $this->template->content = $this->add_view('extinfo/performance');
466 $this->template->title = _('Monitoring').' » '._('Performance info');
467 $content = $this->template->content;
469 $this->template->toolbar = new Toolbar_Controller( _("Performance Information"), _("Program-wide") );
471 $content->title = _("Program-wide performance information");
473 # Values
474 $program_status = Current_status_Model::instance()->program_status();
475 $ls = Livestatus::instance();
476 $hoststats = $ls->getHostPerformance($program_status->program_start);
477 $servicestats = $ls->getServicePerformance($program_status->program_start);
479 $content->program_status = $program_status;
481 # active service checks
482 $content->svc_active_1min = $servicestats->active_1_sum;
483 $content->svc_active_5min = $servicestats->active_5_sum;
484 $content->svc_active_15min = $servicestats->active_15_sum;
485 $content->svc_active_1hour = $servicestats->active_60_sum;
486 $content->svc_active_start = $servicestats->active_all_sum;
487 $content->svc_active_ever = $servicestats->active_sum;
489 # active service checks, percentages
490 $content->svc_active_1min_perc = $servicestats->active_sum > 0 ?
491 number_format(($servicestats->active_1_sum*100)/$servicestats->active_sum, 1) : '0.0';
492 $content->svc_active_5min_perc = $servicestats->active_sum > 0 ?
493 number_format(($servicestats->active_5_sum*100)/$servicestats->active_sum, 1) : '0.0';
494 $content->svc_active_15min_perc = $servicestats->active_sum > 0 ?
495 number_format(($servicestats->active_15_sum*100)/$servicestats->active_sum, 1) : '0.0';
496 $content->svc_active_1hour_perc = $servicestats->active_sum > 0 ?
497 number_format(($servicestats->active_60_sum*100)/$servicestats->active_sum, 1) : '0.0';
498 $content->svc_active_start_perc = $servicestats->active_sum > 0 ?
499 number_format(($servicestats->active_all_sum*100)/$servicestats->active_sum, 1) : '0.0';
501 # passive service checks
502 $content->svc_passive_1min = $servicestats->passive_1_sum;
503 $content->svc_passive_5min = $servicestats->passive_5_sum;
504 $content->svc_passive_15min = $servicestats->passive_15_sum;
505 $content->svc_passive_1hour = $servicestats->passive_60_sum;
506 $content->svc_passive_start = $servicestats->passive_all_sum;
507 $content->svc_passive_ever = $servicestats->passive_sum;
509 # passive service checks, percentages
510 $content->svc_passive_1min_perc = $servicestats->passive_sum > 0 ?
511 number_format(($servicestats->passive_1_sum*100)/$servicestats->passive_sum, 1) : '0.0';
512 $content->svc_passive_5min_perc = $servicestats->passive_sum > 0 ?
513 number_format(($servicestats->passive_5_sum*100)/$servicestats->passive_sum, 1) : '0.0';
514 $content->svc_passive_15min_perc = $servicestats->passive_sum > 0 ?
515 number_format(($servicestats->passive_15_sum*100)/$servicestats->passive_sum, 1) : '0.0';
516 $content->svc_passive_1hour_perc = $servicestats->passive_sum > 0 ?
517 number_format(($servicestats->passive_60_sum*100)/$servicestats->passive_sum, 1) : '0.0';
518 $content->svc_passive_start_perc = $servicestats->passive_sum > 0 ?
519 number_format(($servicestats->passive_all_sum*100)/$servicestats->passive_sum, 1) : '0.0';
521 # service execution time
522 $content->min_service_execution_time = number_format($servicestats->execution_time_min, 2);
523 $content->max_service_execution_time = number_format($servicestats->execution_time_max, 2);
524 $content->svc_average_execution_time = number_format($servicestats->execution_time_avg, 3);
526 # service latency
527 $content->min_service_latency = number_format($servicestats->latency_min, 2);
528 $content->max_service_latency = number_format($servicestats->latency_max, 2);
529 $content->average_service_latency = number_format($servicestats->latency_avg, 3);
531 # service state change - active
532 $content->min_service_percent_change_a = number_format($servicestats->active_state_change_min, 2);
533 $content->max_service_percent_change_a = number_format($servicestats->active_state_change_max, 2);
534 $content->average_service_percent_change = number_format($servicestats->active_state_change_avg, 3);
536 # service state change - passive
537 $content->min_service_percent_change_b = number_format($servicestats->passive_state_change_min, 2);
538 $content->max_service_percent_change_b = number_format($servicestats->passive_state_change_max, 2);
539 $content->average_service_percent_change = number_format($servicestats->passive_state_change_avg, 3);
541 # active host checks
542 $content->hst_active_1min = $hoststats->active_1_sum;
543 $content->hst_active_5min = $hoststats->active_5_sum;
544 $content->hst_active_15min = $hoststats->active_15_sum;
545 $content->hst_active_1hour = $hoststats->active_60_sum;
546 $content->hst_active_start = $hoststats->active_all_sum;
547 $content->hst_active_ever = $hoststats->active_sum;
549 # active host checks, percentages
550 $content->hst_active_1min_perc = $hoststats->active_sum > 0 ?
551 number_format(($hoststats->active_1_sum*100)/$hoststats->active_sum, 1) : '0.0';
552 $content->hst_active_5min_perc = $hoststats->active_sum > 0 ?
553 number_format(($hoststats->active_5_sum*100)/$hoststats->active_sum, 1) : '0.0';
554 $content->hst_active_15min_perc = $hoststats->active_sum > 0 ?
555 number_format(($hoststats->active_15_sum*100)/$hoststats->active_sum, 1) : '0.0';
556 $content->hst_active_1hour_perc = $hoststats->active_sum > 0 ?
557 number_format(($hoststats->active_60_sum*100)/$hoststats->active_sum, 1) : '0.0';
558 $content->hst_active_start_perc = $hoststats->active_sum > 0 ?
559 number_format(($hoststats->active_all_sum*100)/$hoststats->active_sum, 1) : '0.0';
561 # passive host checks
562 $content->hst_passive_1min = $hoststats->passive_1_sum;
563 $content->hst_passive_5min = $hoststats->passive_5_sum;
564 $content->hst_passive_15min = $hoststats->passive_15_sum;
565 $content->hst_passive_1hour = $hoststats->passive_60_sum;
566 $content->hst_passive_start = $hoststats->passive_all_sum;
567 $content->hst_passive_ever = $hoststats->passive_sum;
569 # passive host checks, percentages
570 $content->hst_passive_1min_perc = $hoststats->passive_sum > 0 ?
571 number_format(($hoststats->passive_1_sum*100)/$hoststats->passive_sum, 1) : '0.0';
572 $content->hst_passive_5min_perc = $hoststats->passive_sum > 0 ?
573 number_format(($hoststats->passive_5_sum*100)/$hoststats->passive_sum, 1) : '0.0';
574 $content->hst_passive_15min_perc = $hoststats->passive_sum > 0 ?
575 number_format(($hoststats->passive_15_sum*100)/$hoststats->passive_sum, 1) : '0.0';
576 $content->hst_passive_1hour_perc = $hoststats->passive_sum > 0 ?
577 number_format(($hoststats->passive_60_sum*100)/$hoststats->passive_sum, 1) : '0.0';
578 $content->hst_passive_start_perc = $hoststats->passive_sum > 0 ?
579 number_format(($hoststats->passive_all_sum*100)/$hoststats->passive_sum, 1) : '0.0';
581 # host execution time
582 $content->min_host_execution_time = number_format($hoststats->execution_time_min, 2);
583 $content->max_host_execution_time = number_format($hoststats->execution_time_max, 2);
584 $content->average_host_execution_time = number_format($hoststats->execution_time_avg, 3);
586 # host latency
587 $content->min_host_latency = number_format($hoststats->latency_min, 2);
588 $content->max_host_latency = number_format($hoststats->latency_max, 2);
589 $content->average_host_latency = number_format($hoststats->latency_avg, 3);
591 # host state change - active
592 $content->min_host_percent_change_a = number_format($hoststats->active_state_change_min, 2);
593 $content->max_host_percent_change_a = number_format($hoststats->active_state_change_max, 2);
594 $content->average_host_percent_change = number_format($hoststats->active_state_change_avg, 3);
596 # host state change - passive
597 $content->min_host_percent_change_b = number_format($hoststats->passive_state_change_min, 2);
598 $content->max_host_percent_change_b = number_format($hoststats->passive_state_change_max, 2);
599 $content->average_host_percent_change = number_format($hoststats->passive_state_change_avg, 3);
603 * Show scheduling queue
605 public function scheduling_queue()
607 $back_link = '/extinfo/scheduling_queue/';
609 $host = $this->input->get('host');
610 $service = $this->input->get('service');
611 $sq_model = new Scheduling_queue_Model();
613 $items_per_page = $this->input->get('items_per_page', config::get('pagination.default.items_per_page', '*'));
614 $pagination = new CountlessPagination(array('items_per_page' => $items_per_page));
616 $sq_model->set_range(
617 $pagination->items_per_page,
618 ($pagination->current_page-1)*$pagination->items_per_page
621 if (!Auth::instance()->authorized_for('host_view_all')) {
622 return url::redirect('extinfo/unauthorized/scheduling_queue');
625 $this->xtra_js[] = $this->add_path('extinfo/js/extinfo.js');
626 $this->xtra_js[] = 'application/media/js/jquery.tablesorter.min.js';
627 $this->js_strings .= "var _filter_label = '"._('Enter text to filter')."';";
628 $this->template->js_strings = $this->js_strings;
630 $this->session->set('back_extinfo',$back_link);
632 $this->template->title = _('Monitoring').' » '._('Scheduling queue');
633 $this->template->content = $this->add_view('extinfo/scheduling_queue');
634 $this->template->content->data = $sq_model->show_scheduling_queue($service, $host);
636 if(!$this->template->content->data || count($this->template->content->data) < $items_per_page) {
637 $pagination->hide_next = true;
640 $this->template->content->host_search = $host;
641 $this->template->content->service_search = $service;
642 $this->template->content->header_links = array(
643 'host_name' => _('Host'),
644 'description' => _('Service'),
645 'last_check' => _('Last check'),
646 'next_check' => _('Next check')
649 $this->template->content->date_format_str = nagstat::date_format();
650 $this->template->toolbar = new Toolbar_Controller( "Scheduling Queue" );
652 $form = '<form action="scheduling_queue" method="get">';
653 $form .= _('Search for');
654 $form .= '<label> ' . _('Host') . ': <input name="host" value="' . $host . '" /></label>';
655 $form .= '<label> ' . _('Service') . ': <input name="service" value="' . $service . '" /></label>';
656 $form .= '<input type="submit" value="' . _('Search') . '" /></form>';
658 $this->template->toolbar->info( $form );
659 if ( isset( $pagination ) ) {
660 $this->template->toolbar->info( $pagination );
663 if ( $host || $service ) {
664 $this->template->toolbar->info( ' <span>' .
665 ' ' . _("Do you want to") .
666 ' <a href="'. Kohana::config('config.site_domain') . 'index.php/' . Router::$controller . '/' . Router::$method . '">' .
667 _("reset the search filter?") . '</a></span>'