dd downtime overview

Add the downtime overview view, add the downtimes controller action, fix issues
with the the DowntimeQuery and add the new fields to the DowntimeView. Fix
issues in the ShowController that occur due to the changes in the DowntimeQuery.

refs #4188
This commit is contained in:
Matthias Jentsch 2013-07-30 17:17:19 +02:00 committed by Jannis Moßhammer
parent 23121c2d76
commit e47954b471
9 changed files with 250 additions and 28 deletions

View File

@ -71,7 +71,6 @@ class AuthenticationController extends ActionController
if ($this->view->form->isPostAndValid()) {
$credentials->setUsername($this->view->form->getValue('username'));
$credentials->setPassword($this->view->form->getValue('password'));

0
config/backends.ini.in Normal file → Executable file
View File

0
config/menu.ini Normal file → Executable file
View File

1
config/modules/monitoring/menu.ini Normal file → Executable file
View File

@ -9,4 +9,5 @@ _1 = 1
Hosts = "/monitoring/list/hosts"
Services = "/monitoring/list/services"
Downtimes = "/monitoring/list/downtimes"
Summaries = "/monitoring/summary/group/by/hostgroup"

View File

@ -45,7 +45,6 @@ class Monitoring_ListController extends ModuleActionController
'host_last_comment'
)
);
}
public function servicesAction()
@ -86,9 +85,7 @@ class Monitoring_ListController extends ModuleActionController
'service_notes_url',
'service_last_comment'
));
if ($this->_getParam('sort')) {
$this->view->sort = $this->_getParam('sort');
}
$this->inheritCurrentSortColumn();
}
public function hostgroupsAction()
@ -145,6 +142,36 @@ class Monitoring_ListController extends ModuleActionController
exit;
}
/**
* Fetch the current downtimes and put them into the view
* property 'downtimes'
*/
public function downtimesAction()
{
$query = $this->backend->select()
->from('downtime',array(
'host_name',
'object_type',
'service_description',
'downtime_entry_time',
'downtime_internal_downtime_id',
'downtime_author_name',
'downtime_comment_data',
'downtime_duration',
'downtime_scheduled_start_time',
'downtime_scheduled_end_time',
'downtime_is_fixed',
'downtime_is_in_effect',
'downtime_triggered_by_id',
'downtime_trigger_time'
));
if (!$this->_getParam('sort')) {
$query->order('downtime_is_in_effect');
}
$this->view->downtimes = $query->applyRequest($this->_request);
$this->inheritCurrentSortColumn();
}
protected function query($view, $columns)
{
$extra = preg_split(
@ -197,6 +224,11 @@ class Monitoring_ListController extends ModuleActionController
'icon' => 'img/classic/server.png',
'url' => 'monitoring/list/hosts',
));
$tabs->add('downtimes', array(
'title' => 'Downtimes',
'icon' => 'img/classic/downtime.gif',
'url' => 'monitoring/list/downtimes',
));
/*
$tabs->add('hostgroups', array(
'title' => 'Hostgroups',
@ -221,4 +253,16 @@ class Monitoring_ListController extends ModuleActionController
*/
return $tabs;
}
/**
* Let the current response inherit the used sort column by applying it to the
* view property 'sort'
*/
private function inheritCurrentSortColumn()
{
if ($this->_getParam('sort')) {
$this->view->sort = $this->_getParam('sort');
}
}
}

View File

@ -135,6 +135,30 @@ class Monitoring_ShowController extends ModuleActionController
->where('service_description', $this->view->service->service_description)
->fetchAll();
$this->view->downtimes = $this->backend->select()
->from(
'downtime',
array(
'host_name',
'service_description',
'downtime_type',
'downtime_author_name',
'downtime_comment_data',
'downtime_is_fixed',
'downtime_duration',
'downtime_scheduled_start_time',
'downtime_scheduled_end_time',
'downtime_actual_start_time',
'downtime_was_started',
'downtime_is_in_effect',
'downtime_internal_downtime_id'
)
)
->where('host_name', $this->view->host->host_name)
->where('service_description', $this->view->service->service_description)
->where('object_type','service')
->fetchAll();
$this->view->customvars = $this->backend->select()
->from(
'customvar',
@ -236,6 +260,7 @@ class Monitoring_ShowController extends ModuleActionController
)
)
->where('host_name', $this->view->host->host_name)
->where('object_type','host')
->fetchAll();
$this->view->customvars = $this->backend->select()
@ -368,7 +393,6 @@ class Monitoring_ShowController extends ModuleActionController
}
}
}
/**
* Creating tabs for this controller
* @return \Icinga\Web\Widget\AbstractWidget

View File

@ -0,0 +1,159 @@
<?= $this->tabs ?>
<?php
/**
* Create a DateTime from a string and use the util helper to
* format it
*
* @param $self Reference to the current view that contains the helper.
* @param $dateString The String that will be converted.
* @return String The formatted string.
*/
function formatDateString($self,$dateString){
$d = new DateTime($dateString);
return $self->util()->showTime($d->getTimestamp());
}
$paginator = $downtimes->paginate();
$downtimes = $downtimes->fetchAll();
?>
<form method="get" action="<?= $this->qUrl(
'monitoring/list/downtimes?',
array(
'action' => 'downtimes'
));
?>">
Sort by <?= $this->formSelect(
'sort',
$this->sort,
array('class' => 'autosubmit'),
array(
'downtime_is_in_effect' => 'Is In Effect',
'object_type' => 'Service/Host',
'host_name' => 'Host Name',
'service_description' => 'Service Name',
'downtime_entry_time' => 'Entry Time',
'downtime_author_name' => 'Author',
'downtime_comment_data' => 'Comment',
'downtime_scheduled_start_time' => 'Start',
'downtime_scheduled_end_time' => 'End',
'downtime_trigger_time' => 'Trigger Time',
'downtime_internal_downtime_id' => 'Downtime ID',
'downtime_duration' => 'Duration',
)
) ?>
<input type="search" name="filter" placeholder="Type to filter" />
<button class="btn btn-small"><i class="icon-refresh"></i></button>
</form>
<?=
$this->paginationControl(
$paginator,
null,
array(
'mixedPagination.phtml',
'default'),
array('preserve' => $this->preserve))
?>
<table class="statustable action">
<thead>
<th> Is In Effect </th>
<th> Object </th>
<th> Host Name </th>
<th> Service Name </th>
<th> Entry Time </th>
<th> Author </th>
<th> Comment </th>
<th> Start Time </th>
<th> End Time </th>
<th> Type </th>
<th> Trigger Time </th>
<th> Downtime ID </th>
<th> Trigger ID </th>
<th> Duration </th>
</thead>
<?php foreach ($downtimes as $downtime): ?>
<tr class="<?= $downtime->downtime_is_in_effect == 0 ? 'ok' : 'warning' ?>">
<td>
<?= $downtime->downtime_is_in_effect == 0 ? 'False' : '<b>True</b>'; ?>
</td>
<td>
<div class="img-box">
<?php if ($downtime->object_type == 'service'): ?>
<img title="Service" src="<?='../../img/classic/service.png'?>"/>
<?php endif; ?>
<?php if ($downtime->object_type == 'host'): ?>
<img title="Host" src="<?='../../img/classic/server.png'?>"/>
<?php endif; ?>
</div>
</td>
<td>
<?= $downtime->host_name ?>
</td>
<td>
<?= $downtime->service_description ?>
</td>
<td>
<?= formatDateString($this,$downtime->downtime_entry_time); ?>
</td>
<td>
<?= $downtime->downtime_author_name ?>
</td>
<td>
<?= $downtime->downtime_comment_data ?>
</td>
<td>
<?= formatDateString($this,$downtime->downtime_scheduled_start_time); ?>
</td>
<td>
<?= formatDateString($this,$downtime->downtime_scheduled_end_time); ?>
</td>
<td>
<?= $downtime->downtime_is_fixed == 1 ? 'Fixed' : 'Not Fixed' ?>
</td>
<td>
<?php
$date = formatDateString($this,$downtime->downtime_trigger_time);
echo $date != 'undef' ? $date : 'N/A';
?>
</td>
<td>
<?= $downtime->downtime_internal_downtime_id ?>
</td>
<td>
<?= $downtime->downtime_triggered_by_id == 0 ?
'N/A' : $downtime->downtime_triggered_by_id ?>
</td>
<td>
<?= $this->util()->showHourMin(intval($downtime->downtime_duration)); ?>
</td>
<td>
<?php
if (empty($downtime->service_description)) {
echo $this->qlink(
'',
'monitoring/show/host',
array(
'host' => $downtime->host_name
),
array(
'class' => 'row-action'
)
);
} else {
echo $this->qlink(
'',
'monitoring/show/service',
array(
'host' => $downtime->host_name,
'service' => $downtime->service_description
),
array(
'class' => 'row-action'
)
);
}
?>
</td>
</tr>
<?php endforeach ?>
</table>

View File

@ -40,6 +40,7 @@ class DowntimeQuery extends AbstractQuery
'downtime_type' => 'sd.downtime_type',
'downtime_author_name' => 'sd.author_name',
'downtime_comment_data' => 'sd.comment_data',
'downtime_entry_time' => 'sd.entry_time',
'downtime_is_fixed' => 'sd.is_fixed',
'downtime_duration' => 'sd.duration',
'downtime_scheduled_start_time' => 'sd.scheduled_start_time',
@ -49,14 +50,14 @@ class DowntimeQuery extends AbstractQuery
'downtime_actual_start_time_usec' => 'sd.actual_start_time_usec',
'downtime_is_in_effect' => 'sd.is_in_effect',
'downtime_trigger_time' => 'sd.trigger_time',
'downtime_triggered_by_id' => 'sd.triggered_by_id',
'downtime_internal_downtime_id' => 'sd.internal_downtime_id'
),
'hosts' => array(
'host_name' => 'ho.name1',
),
'services' => array(
'service_host_name' => 'so.name1',
'service_description' => 'so.name2',
'objects' => array(
'host_name' => 'o.name1 COLLATE latin1_general_ci',
'service_host_name' => 'o.name1 COLLATE latin1_general_ci',
'service_description' => 'o.name2 COLLATE latin1_general_ci',
'object_type' => "CASE o.objecttype_id WHEN 1 THEN 'host' ELSE 'service' END",
)
);
@ -70,29 +71,17 @@ class DowntimeQuery extends AbstractQuery
array()
);
$this->joinedVirtualTables = array('downtime' => true);
$this->joinedVirtualTables = array('downtime' => true, 'services' => true);
}
/**
* Join if host needed
*/
protected function joinHosts()
protected function joinObjects()
{
$this->baseQuery->join(
array('ho' => $this->prefix . 'objects'),
'sd.object_id = ho.object_id AND ho.is_active = 1 AND ho.objecttype_id = 1',
array()
);
}
/**
* Join if services needed
*/
protected function joinServices()
{
$this->baseQuery->join(
array('so' => $this->prefix . 'objects'),
'so.object_id = ho.object_id AND ho.is_active = 1 AND ho.objecttype_id = 2',
array('o' => $this->prefix . 'objects'),
'sd.object_id = o.object_id AND o.is_active = 1 AND o.objecttype_id IN (1, 2)',
array()
);
}

View File

@ -40,11 +40,16 @@ class DowntimeView extends MonitoringView
* @var string[]
*/
protected $availableColumns = array(
'host_name',
'object_type',
'service_host_name',
'service_description',
'downtime_type',
'downtime_author_name',
'downtime_comment_data',
'downtime_is_fixed',
'downtime_duration',
'downtime_entry_time',
'downtime_scheduled_start_time',
'downtime_scheduled_end_time',
'downtime_was_started',
@ -52,6 +57,7 @@ class DowntimeView extends MonitoringView
'downtime_actual_start_time_usec',
'downtime_is_in_effect',
'downtime_trigger_time',
'downtime_triggered_by_id',
'downtime_internal_downtime_id'
);