From 3573908071898eee6c54d6a3f7a46de85349bb5b Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Tue, 19 Aug 2014 17:03:35 +0200 Subject: [PATCH] Let downtime view look more list-like and fix downtime end calculation refs #6637 --- .../controllers/ListController.php | 5 +- .../views/scripts/list/downtimes.phtml | 181 +++++++++++------- .../Backend/Ido/Query/DowntimeQuery.php | 14 +- .../library/Monitoring/DataView/Downtime.php | 2 + 4 files changed, 135 insertions(+), 67 deletions(-) diff --git a/modules/monitoring/application/controllers/ListController.php b/modules/monitoring/application/controllers/ListController.php index f0cdb2767..6c4cc0101 100644 --- a/modules/monitoring/application/controllers/ListController.php +++ b/modules/monitoring/application/controllers/ListController.php @@ -222,6 +222,7 @@ class Monitoring_ListController extends Controller 'author' => 'downtime_author', 'start' => 'downtime_start', 'scheduled_start' => 'downtime_scheduled_start', + 'scheduled_end' => 'downtime_scheduled_end', 'end' => 'downtime_end', 'duration' => 'downtime_duration', 'is_flexible' => 'downtime_is_flexible', @@ -229,7 +230,9 @@ class Monitoring_ListController extends Controller 'is_in_effect' => 'downtime_is_in_effect', 'entry_time' => 'downtime_entry_time', 'host' => 'downtime_host', - 'service' => 'downtime_service' + 'service' => 'downtime_service', + 'host_state' => 'downtime_host_state', + 'service_state' => 'downtime_service_state' ))->order('downtime_is_in_effect', 'DESC') ->order('downtime_scheduled_start', 'DESC'); diff --git a/modules/monitoring/application/views/scripts/list/downtimes.phtml b/modules/monitoring/application/views/scripts/list/downtimes.phtml index 995a66001..babb76074 100644 --- a/modules/monitoring/application/views/scripts/list/downtimes.phtml +++ b/modules/monitoring/application/views/scripts/list/downtimes.phtml @@ -1,70 +1,121 @@ getHelper('CommandForm'); ?> -
-tabs ?> -
-sortControl->render($this); ?> -
-paginationControl($downtimes, null, null, array('preserve' => $this->preserve)); ?> -
-
- - -downtimes as $downtime): ?> - - - - - - -
- dateFormat()->formatDateTime($downtime->start); ?> - - dateFormat()->formatDateTime($downtime->end); ?> -
- Duration: util()->showHourMin($downtime->duration); ?> -
- The is_flexible): ?>flexiblefixed downtime is is_in_effect): ?>not in effect -
- service)): ?> - service ?> - on host ?> - - host ?> - -
- author ?>: comment ?> -
- Entry Time: entry_time) ? $this->dateFormat()->formatDateTime((int) $downtime->entry_time) : ''; ?> - -
- $downtime->id, - 'host' => $downtime->host - ); - if (isset($downtime->service)) { - $data['service'] = $downtime->service; - } - // echo $helper->iconSubmitForm( - // 'img/icons/remove.png', - echo $helper->labelSubmitForm( - 'X', - 'Remove Downtime', - 'link-like', - 'removedowntime', - $data - ); - ?> -
+compact): ?> +
+ tabs->render($this); ?> +
+ translate('Sort by'); ?> sortControl->render($this); ?> +
+ widget('limiter', array('url' => $this->url, 'max' => $downtimes->count())); ?> + paginationControl($downtimes, null, null, array('preserve' => $this->preserve)); ?> +
+ + +
+ + translate('No downtimes matching the filter'); ?> +
+ + + + + + service)) { + $stateName = strtolower($this->util()->getServiceStateName($downtime->service_state)); + } else { + $stateName = strtolower($this->util()->getHostStateName($downtime->host_state)); + } + ?> + + + + $downtime->id, + 'host' => $downtime->host + ); + if (isset($downtime->service)) { + $data['service'] = $downtime->service; + } + ?> + + + + +
+ is_in_effect ? $this->translate('Expires') : $this->translate('Starts'); ?> +
+ prefixedTimeUntil($downtime->is_in_effect ? $downtime->end : $downtime->start); ?> +
+ service)): ?> + + service; ?> + + + translate('on'); ?> host; ?> + + + + host; ?> + + +
+ icon('comment.png'); ?> [author; ?>] comment; ?> +
+ + is_flexible): ?> + is_in_effect): ?> + translate('This flexible downtime was started on %s at %s and lasts for %s until %s at %s.'), + date('d.m.y', $downtime->start), + date('H:i', $downtime->start), + $this->format()->duration($downtime->duration), + date('d.m.y', $downtime->end), + date('H:i', $downtime->end) + ); ?> + + translate('This flexible downtime has been scheduled to start between %s - %s and to last for %s.'), + date('d.m.y H:i', $downtime->scheduled_start), + date('d.m.y H:i', $downtime->scheduled_end), + $this->format()->duration($downtime->duration) + ); ?> + + + is_in_effect): ?> + translate('This fixed downtime was started on %s at %s and expires on %s at %s.'), + date('d.m.y', $downtime->start), + date('H:i', $downtime->start), + date('d.m.y', $downtime->end), + date('H:i', $downtime->end) + ); ?> + + translate('This fixed downtime has been scheduled to start on %s at %s and to end on %s at %s.'), + date('d.m.y', $downtime->scheduled_start), + date('H:i', $downtime->scheduled_start), + date('d.m.y', $downtime->scheduled_end), + date('H:i', $downtime->scheduled_end) + ); ?> + + + +
+ labelSubmitForm( + 'X', + 'Remove Downtime', + 'link-like', + 'removedowntime', + $data + ); ?> +
diff --git a/modules/monitoring/library/Monitoring/Backend/Ido/Query/DowntimeQuery.php b/modules/monitoring/library/Monitoring/Backend/Ido/Query/DowntimeQuery.php index 324d72c4c..1f5e17c6c 100644 --- a/modules/monitoring/library/Monitoring/Backend/Ido/Query/DowntimeQuery.php +++ b/modules/monitoring/library/Monitoring/Backend/Ido/Query/DowntimeQuery.php @@ -24,13 +24,15 @@ class DowntimeQuery extends IdoQuery 'downtime_scheduled_start' => 'UNIX_TIMESTAMP(sd.scheduled_start_time)', 'downtime_scheduled_end' => 'UNIX_TIMESTAMP(sd.scheduled_end_time)', 'downtime_start' => "UNIX_TIMESTAMP(CASE WHEN sd.trigger_time != '0000-00-00 00:00:00' then sd.trigger_time ELSE sd.scheduled_start_time END)", - 'downtime_end' => 'UNIX_TIMESTAMP(sd.scheduled_end_time)', + 'downtime_end' => 'CASE WHEN sd.is_fixed THEN UNIX_TIMESTAMP(sd.scheduled_end_time) ELSE UNIX_TIMESTAMP(sd.trigger_time) + sd.duration END', 'downtime_duration' => 'sd.duration', 'downtime_is_in_effect' => 'sd.is_in_effect', 'downtime_internal_id' => 'sd.internal_downtime_id', 'downtime_host' => 'CASE WHEN ho.name1 IS NULL THEN so.name1 ELSE ho.name1 END COLLATE latin1_general_ci', 'downtime_service' => 'so.name2 COLLATE latin1_general_ci', 'downtime_objecttype' => "CASE WHEN ho.object_id IS NOT NULL THEN 'host' ELSE CASE WHEN so.object_id IS NOT NULL THEN 'service' ELSE NULL END END", + 'downtime_host_state' => 'CASE WHEN hs.has_been_checked = 0 OR hs.has_been_checked IS NULL THEN 99 ELSE hs.current_state END', + 'downtime_service_state' => 'CASE WHEN ss.has_been_checked = 0 OR ss.has_been_checked IS NULL THEN 99 ELSE ss.current_state END' ), ); @@ -53,6 +55,16 @@ class DowntimeQuery extends IdoQuery 'sd.object_id = so.object_id AND so.is_active = 1 AND so.objecttype_id = 2', array() ); + $this->select->joinLeft( + array('hs' => $this->prefix . 'hoststatus'), + 'ho.object_id = hs.host_object_id', + array() + ); + $this->select->joinLeft( + array('ss' => $this->prefix . 'servicestatus'), + 'so.object_id = ss.service_object_id', + array() + ); $this->joinedVirtualTables = array('downtime' => true); } } diff --git a/modules/monitoring/library/Monitoring/DataView/Downtime.php b/modules/monitoring/library/Monitoring/DataView/Downtime.php index 8bd97673a..214e1afb5 100644 --- a/modules/monitoring/library/Monitoring/DataView/Downtime.php +++ b/modules/monitoring/library/Monitoring/DataView/Downtime.php @@ -30,6 +30,8 @@ class Downtime extends DataView 'downtime_internal_id', 'downtime_host', 'downtime_service', + 'downtime_host_state', + 'downtiem_service_state' ); }