Apply style to detail

refs #4869
This commit is contained in:
Marius Hein 2013-10-15 12:48:33 +02:00
parent a69c7498ec
commit d6fd3350e0
12 changed files with 426 additions and 166 deletions

View File

@ -1,9 +1,12 @@
<div class="panel panel-default">
<div>
<div class="panel-heading">
{{CHECK_COMMAND_ICON}}
<span>Check Command</span>
<div class="panel-hostname">
Check Command
</div>
</div>
<hr class="separator" />
<div class="panel-body">
<table>
<tr>

View File

@ -1,4 +1,3 @@
<?php if (!empty($object->contacts)): ?>
<?php
$contacts = array();
foreach ($object->contacts as $contact) {
@ -14,17 +13,24 @@ foreach ($object->contacts as $contact) {
. '</a>';
}
?>
<div class="panel panel-default">
<div>
<div class="panel-heading">
{{CONTACT_ICON}} <span>Contacts</span>
<div class="panel-hostname">
Contacts
</div>
</div>
<hr class="separator" />
<div class="panel-body">
<?= implode(', ', $contacts); ?>
<?php if (!count($contacts)): ?>
No Contacts
<?php else: ?>
<?= implode(', ', $contacts); ?>
<?php endif; ?>
</div>
</div>
<?php endif; ?>
<?php if (!empty($object->contactgroups)): ?>
<?php
$contactgroups = array();
foreach ($object->contactgroups as $contactgroup) {
@ -40,12 +46,20 @@ foreach ($object->contactgroups as $contactgroup) {
. '</a>';
}
?>
<div class="panel panel-default">
<div>
<div class="panel-heading">
{{CONTACTGROUP_ICON}} <span>Contactgroups</span>
<div class="panel-hostname">
Contactgroups
</div>
</div>
<hr class="separator" />
<div class="panel-body">
<?= implode(', ', $contactgroups); ?>
<?php if (!count($contactgroups)): ?>
No Contactgroups
<?php else: ?>
<?= implode(', ', $contactgroups); ?>
<?php endif; ?>
</div>
</div>
<?php endif; ?>

View File

@ -8,6 +8,15 @@
<hr class="separator" />
<div class="panel-body">
<?php var_dump($this->object); ?>
<?php if (empty($this->object->customvars)): ?>
No customvars
<?php else: ?>
<dl class="dl-horizontal">
<?php foreach ($this->object->customvars as $varname => $varvalue): ?>
<dt><?= $varname; ?></dt>
<dd><?= $varvalue; ?></dd>
<?php endforeach; ?>
</dl>
<?php endif; ?>
</div>
</div>

View File

@ -56,7 +56,7 @@
<tr>
<td>No Downtimes</td>
</tr>
<?php endif; ?>
<?php else: ?>
<?php foreach ($this->object->downtimes as $downtime): ?>
<tr>
<td>
@ -89,6 +89,7 @@
</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
</div>

View File

@ -1,4 +1,3 @@
<?php if (!empty($object->hostgroups)): ?>
<?php
$hostgroups = array();
foreach ($object->hostgroups as $name => $alias) {
@ -7,12 +6,20 @@ foreach ($object->hostgroups as $name => $alias) {
. '</a>';
}
?>
<div class="panel panel-default">
<div>
<div class="panel-heading">
{{HOSTGROUP_ICON}} <span>Hostgroups</span>
<div class="panel-hostname">
Hostgroups
</div>
</div>
<hr class="separator" />
<div class="panel-body">
<?= implode(', ', $hostgroups); ?>
<?php if (!count($hostgroups)): ?>
No Hostgroups
<?php else: ?>
<?= implode(', ', $hostgroups); ?>
<?php endif; ?>
</div>
</div>
<?php endif; ?>
</div>

View File

@ -10,12 +10,8 @@
<dl class="dl-horizontal">
<dt>Latency</dt>
<dd><?= sprintf('%.2f', $this->object->check_execution_time); ?>s</dd>
</dl>
<dl class="dl-horizontal">
<dt>Duration</dt>
<dd><?= sprintf('%.2f', $this->object->check_latency); ?>s</dd>
</dl>
<dl class="dl-horizontal">
<dt>Attempt</dt>
<dd>
<?= $this->object->current_check_attempt; ?>/<?= $this->object->max_check_attempts; ?>

View File

@ -1,4 +1,3 @@
<?php if (!empty($object->servicegroups)): ?>
<?php
$servicegroups = array();
foreach ($object->servicegroups as $name => $alias) {
@ -7,12 +6,20 @@ foreach ($object->servicegroups as $name => $alias) {
. '</a>';
}
?>
<div class="panel panel-default">
<div>
<div class="panel-heading">
{{SERVICEGROUP_ICON}} <span>Servicegroups</span>
<div class="panel-hostname">
Servicegroups
</div>
</div>
<hr class="separator" />
<div class="panel-body">
<?= implode(', ', $servicegroups); ?>
<?php if (!count($servicegroups)): ?>
No Servicegroups
<?php else: ?>
<?= implode(', ', $servicegroups); ?>
<?php endif; ?>
</div>
</div>
<?php endif; ?>

View File

@ -5,6 +5,6 @@
<?= $this->render('show/components/properties.phtml'); ?>
<?= $this->render('show/components/flags.phtml'); ?>
<?= $this->render('show/components/customvars.phtml'); ?>
<?= $this->render('show/components/servicegroups.phtml'); ?>
<?= $this->render('show/components/hostgroups.phtml'); ?>
<?= $this->render('show/components/contacts.phtml'); ?>
<?= $this->render('show/components/command.phtml') ?>

View File

@ -0,0 +1,65 @@
<?php
// {{{ICINGA_LICENSE_HEADER}}}
/**
* This file is part of Icinga 2 Web.
*
* Icinga 2 Web - Head for multiple monitoring backends.
* Copyright (C) 2013 Icinga Development Team
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
*
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* @copyright 2013 Icinga Development Team <info@icinga.org>
* @license http://www.gnu.org/licenses/gpl-2.0.txt GPL, version 2
* @author Icinga Development Team <info@icinga.org>
*/
// {{{ICINGA_LICENSE_HEADER}}}
namespace Icinga\Module\Monitoring\DataView;
/**
* Represent customvar view
*/
class Customvar extends DataView
{
/**
* Retrieve columns provided by this view
*
* @return array
*/
public function getColumns()
{
return array(
'varname',
'varvalue',
'object_type'
);
}
/**
* Retrieve default sorting rules for particular columns. These involve sort order and potential additional to sort
*
* @return array
*/
public function getSortRules()
{
return array(
'varname' => array(
'varname' => self::SORT_ASC,
'varvalue' => self::SORT_ASC,
)
);
}
}

View File

@ -1,10 +1,40 @@
<?php
// {{{ICINGA_LICENSE_HEADER}}}
/**
* This file is part of Icinga 2 Web.
*
* Icinga 2 Web - Head for multiple monitoring backends.
* Copyright (C) 2013 Icinga Development Team
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
*
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* @copyright 2013 Icinga Development Team <info@icinga.org>
* @license http://www.gnu.org/licenses/gpl-2.0.txt GPL, version 2
* @author Icinga Development Team <info@icinga.org>
*/
// {{{ICINGA_LICENSE_HEADER}}}
namespace Icinga\Module\Monitoring\Object;
use Icinga\Data\AbstractQuery as Query;
use \Icinga\Module\Monitoring\Backend;
/**
* Generic icinga object with belongings
*/
abstract class AbstractObject
{
protected $backend;
@ -17,14 +47,7 @@ abstract class AbstractObject
protected $properties;
protected $foreign = array(
// 'hostgroups' => null,
// 'contacts' => null,
// 'contactgroups' => null,
// 'servicegroups' => null,
// 'customvars' => null,
// 'comments' => null,
);
protected $foreign = array();
public function __construct(Backend $backend, $name1, $name2 = null)
{
@ -81,10 +104,13 @@ abstract class AbstractObject
protected function fetchHostgroups()
{
$this->foreign['hostgroups'] = $this->applyObjectFilter(
$this->backend->select()->from('hostgroup', array(
'hostgroup_name',
'hostgroup_alias'
))
$this->backend->select()->from(
'hostgroup',
array(
'hostgroup_name',
'hostgroup_alias'
)
)
)->fetchPairs();
return $this;
}
@ -92,10 +118,13 @@ abstract class AbstractObject
protected function fetchServicegroups()
{
$this->foreign['servicegroups'] = $this->applyObjectFilter(
$this->backend->select()->from('servicegroup', array(
'servicegroup_name',
'servicegroup_alias'
))
$this->backend->select()->from(
'servicegroup',
array(
'servicegroup_name',
'servicegroup_alias'
)
)
)->fetchPairs();
return $this;
}
@ -103,12 +132,15 @@ abstract class AbstractObject
protected function fetchContacts()
{
$this->foreign['contacts'] = $this->applyObjectFilter(
$this->backend->select()->from('contact', array(
'contact_name',
'contact_alias',
'contact_email',
'contact_pager',
))
$this->backend->select()->from(
'contact',
array(
'contact_name',
'contact_alias',
'contact_email',
'contact_pager',
)
)
)->fetchAll();
return $this;
}
@ -116,10 +148,13 @@ abstract class AbstractObject
protected function fetchContactgroups()
{
$this->foreign['contactgroups'] = $this->applyObjectFilter(
$this->backend->select()->from('contactgroup', array(
'contactgroup_name',
'contactgroup_alias',
))
$this->backend->select()->from(
'contactgroup',
array(
'contactgroup_name',
'contactgroup_alias',
)
)
)->fetchAll();
return $this;
}
@ -127,12 +162,15 @@ abstract class AbstractObject
protected function fetchComments()
{
$this->foreign['comments'] = $this->applyObjectFilter(
$this->backend->select()->from('comment', array(
'comment_timestamp',
'comment_author',
'comment_data',
'comment_type',
))->where('comment_objecttype_id', $this->type)
$this->backend->select()->from(
'comment',
array(
'comment_timestamp',
'comment_author',
'comment_data',
'comment_type',
)
)->where('comment_objecttype_id', $this->type)
)->fetchAll();
return $this;
}
@ -140,12 +178,13 @@ abstract class AbstractObject
protected function fetchCustomvars()
{
$this->foreign['customvars'] = $this->applyObjectFilter(
$this->backend->select()->from('customvar', array(
'varname',
'varvalue'
))
->where('varname', '-*PW*,-*PASS*,-*COMMUNITY*')
->where('object_type', 'host')
$this->backend->select()->from(
'customvar',
array(
'varname',
'varvalue'
)
)->where('varname', '-*PW*,-*PASS*,-*COMMUNITY*')
)->fetchPairs();
return $this;
}
@ -153,17 +192,20 @@ abstract class AbstractObject
public function fetchEventHistory()
{
$this->foreign['eventHistory'] = $this->applyObjectFilter(
$this->backend->select()->from('eventHistory', array(
'object_type',
'host_name',
'service_description',
'timestamp',
'state',
'attempt',
'max_attempts',
'output',
'type'
))
$this->backend->select()->from(
'eventHistory',
array(
'object_type',
'host_name',
'service_description',
'timestamp',
'state',
'attempt',
'max_attempts',
'output',
'type'
)
)
);
return $this;
}
@ -171,7 +213,9 @@ abstract class AbstractObject
public function fetchDowtimes()
{
$this->foreign['downtimes'] = $this->applyObjectFilter(
$this->backend->select()->from('downtime', array(
$this->backend->select()->from(
'downtime',
array(
'host_name',
'object_type',
'service_host_name',

View File

@ -1,9 +1,39 @@
<?php
// {{{ICINGA_LICENSE_HEADER}}}
/**
* This file is part of Icinga 2 Web.
*
* Icinga 2 Web - Head for multiple monitoring backends.
* Copyright (C) 2013 Icinga Development Team
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
*
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* @copyright 2013 Icinga Development Team <info@icinga.org>
* @license http://www.gnu.org/licenses/gpl-2.0.txt GPL, version 2
* @author Icinga Development Team <info@icinga.org>
*/
// {{{ICINGA_LICENSE_HEADER}}}
namespace Icinga\Module\Monitoring\Object;
use Icinga\Data\AbstractQuery as Query;
/**
* Represent a host object
*/
class Host extends AbstractObject
{
protected $foreign = array(
@ -12,19 +42,35 @@ class Host extends AbstractObject
'contactgroups' => null,
'customvars' => null,
'comments' => null,
'downtimes' => null
'downtimes' => null,
'customvars' => null
);
/**
* Statename
*/
public function stateName()
{
// TODO
}
/**
* Filter object belongings
*
* @param Query $query
*
* @return Query
*/
protected function applyObjectFilter(Query $query)
{
return $query->where('host_name', $this->name1);
}
/**
* Load foreign object data
*
* @return self
*/
public function prefetch()
{
return $this->fetchHostgroups()
@ -32,48 +78,56 @@ class Host extends AbstractObject
->fetchContactgroups()
->fetchCustomvars()
->fetchComments()
->fetchDowtimes();
->fetchDowtimes()
->fetchCustomvars();
}
/**
* Load object data
* @return object
*/
protected function fetchObject()
{
return $this->backend->select()->from('status', array(
'host_name',
'host_alias',
'host_address',
'host_state',
'host_handled',
'host_in_downtime',
'in_downtime' => 'host_in_downtime',
'host_acknowledged',
'host_last_state_change',
'last_state_change' => 'host_last_state_change',
'last_notification' => 'host_last_notification',
'last_check' => 'host_last_check',
'next_check' => 'host_next_check',
'check_execution_time' => 'host_check_execution_time',
'check_latency' => 'host_check_latency',
'output' => 'host_output',
'long_output' => 'host_long_output',
'check_command' => 'host_check_command',
'perfdata' => 'host_perfdata',
'host_icon_image',
'passive_checks_enabled' => 'host_passive_checks_enabled',
'obsessing' => 'host_obsessing',
'notifications_enabled' => 'host_notifications_enabled',
'event_handler_enabled' => 'host_event_handler_enabled',
'flap_detection_enabled' => 'host_flap_detection_enabled',
'active_checks_enabled' => 'host_active_checks_enabled',
'current_check_attempt' => 'host_current_check_attempt',
'max_check_attempts' => 'host_max_check_attempts',
'last_notification' => 'host_last_notification',
'current_notification_number' => 'host_current_notification_number',
'percent_state_change' => 'host_percent_state_change',
'is_flapping' => 'host_is_flapping',
'last_comment' => 'host_last_comment',
'action_url' => 'host_action_url',
'notes_url' => 'host_notes_url',
'percent_state_change' => 'host_percent_state_change'
))->where('host_name', $this->name1)->fetchRow();
return $this->backend->select()->from(
'status',
array(
'host_name',
'host_alias',
'host_address',
'host_state',
'host_handled',
'host_in_downtime',
'in_downtime' => 'host_in_downtime',
'host_acknowledged',
'host_last_state_change',
'last_state_change' => 'host_last_state_change',
'last_notification' => 'host_last_notification',
'last_check' => 'host_last_check',
'next_check' => 'host_next_check',
'check_execution_time' => 'host_check_execution_time',
'check_latency' => 'host_check_latency',
'output' => 'host_output',
'long_output' => 'host_long_output',
'check_command' => 'host_check_command',
'perfdata' => 'host_perfdata',
'host_icon_image',
'passive_checks_enabled' => 'host_passive_checks_enabled',
'obsessing' => 'host_obsessing',
'notifications_enabled' => 'host_notifications_enabled',
'event_handler_enabled' => 'host_event_handler_enabled',
'flap_detection_enabled' => 'host_flap_detection_enabled',
'active_checks_enabled' => 'host_active_checks_enabled',
'current_check_attempt' => 'host_current_check_attempt',
'max_check_attempts' => 'host_max_check_attempts',
'last_notification' => 'host_last_notification',
'current_notification_number' => 'host_current_notification_number',
'percent_state_change' => 'host_percent_state_change',
'is_flapping' => 'host_is_flapping',
'last_comment' => 'host_last_comment',
'action_url' => 'host_action_url',
'notes_url' => 'host_notes_url',
'percent_state_change' => 'host_percent_state_change'
)
)->where('host_name', $this->name1)->fetchRow();
}
}

View File

@ -1,31 +1,82 @@
<?php
// {{{ICINGA_LICENSE_HEADER}}}
/**
* This file is part of Icinga 2 Web.
*
* Icinga 2 Web - Head for multiple monitoring backends.
* Copyright (C) 2013 Icinga Development Team
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
*
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* @copyright 2013 Icinga Development Team <info@icinga.org>
* @license http://www.gnu.org/licenses/gpl-2.0.txt GPL, version 2
* @author Icinga Development Team <info@icinga.org>
*/
// {{{ICINGA_LICENSE_HEADER}}}
namespace Icinga\Module\Monitoring\Object;
use Icinga\Data\AbstractQuery as Query;
/**
* Represent a single service
*/
class Service extends AbstractObject
{
/**
* Foreign references to objects
*
* @var array
*/
protected $foreign = array(
'servicegroups' => null,
'contacts' => null,
'contactgroups' => null,
'customvars' => null,
'comments' => null,
'downtimes' => null
'downtimes' => null,
'customvars' => null
);
/**
* Statename
*/
public function stateName()
{
// TODO
}
/**
* Filter foreign object belongings
*
* @param Query $query
*
* @return Query
*/
protected function applyObjectFilter(Query $query)
{
return $query->where('service_host_name', $this->name1)
->where('service_description', $this->name2);
}
/**
* Collect foreign data
*
* @return self
*/
public function prefetch()
{
return $this->fetchServicegroups()
@ -33,54 +84,63 @@ class Service extends AbstractObject
->fetchContactgroups()
->fetchCustomvars()
->fetchComments()
->fetchDowtimes();
->fetchDowtimes()
->fetchCustomvars();
}
/**
* Load object data
*
* @return object
*/
protected function fetchObject()
{
return $this->backend->select()->from('status', array(
'host_name',
'host_alias',
'host_address',
'host_state',
'host_handled',
'host_in_downtime',
'host_acknowledged',
'host_last_state_change',
'service_description',
'service_state',
'service_handled',
'service_acknowledged',
'service_in_downtime',
'service_last_state_change',
'last_check' => 'service_last_check',
'next_check' => 'service_next_check',
'check_execution_time' => 'service_check_execution_time',
'check_latency' => 'service_check_latency',
'output' => 'service_output',
'long_output' => 'service_long_output',
'check_command' => 'service_check_command',
'perfdata' => 'service_perfdata',
'current_check_attempt' => 'service_current_check_attempt',
'max_check_attempts' => 'service_max_check_attempts',
'state_type' => 'service_state_type',
'passive_checks_enabled' => 'service_passive_checks_enabled',
'last_state_change' => 'service_last_state_change',
'last_notification' => 'service_last_notification',
'current_notification_number' => 'service_current_notification_number',
'is_flapping' => 'service_is_flapping',
'percent_state_change' => 'service_percent_state_change',
'in_downtime' => 'service_in_downtime',
'passive_checks_enabled' => 'service_passive_checks_enabled',
'obsessing' => 'service_obsessing',
'notifications_enabled' => 'service_notifications_enabled',
'event_handler_enabled' => 'service_event_handler_enabled',
'flap_detection_enabled' => 'service_flap_detection_enabled',
'active_checks_enabled' => 'service_active_checks_enabled',
'last_comment' => 'service_last_comment',
'action_url' => 'service_action_url',
'notes_url' => 'service_notes_url'
))
return $this->backend->select()->from(
'status',
array(
'host_name',
'host_alias',
'host_address',
'host_state',
'host_handled',
'host_in_downtime',
'host_acknowledged',
'host_last_state_change',
'service_description',
'service_state',
'service_handled',
'service_acknowledged',
'service_in_downtime',
'service_last_state_change',
'last_check' => 'service_last_check',
'next_check' => 'service_next_check',
'check_execution_time' => 'service_check_execution_time',
'check_latency' => 'service_check_latency',
'output' => 'service_output',
'long_output' => 'service_long_output',
'check_command' => 'service_check_command',
'perfdata' => 'service_perfdata',
'current_check_attempt' => 'service_current_check_attempt',
'max_check_attempts' => 'service_max_check_attempts',
'state_type' => 'service_state_type',
'passive_checks_enabled' => 'service_passive_checks_enabled',
'last_state_change' => 'service_last_state_change',
'last_notification' => 'service_last_notification',
'current_notification_number' => 'service_current_notification_number',
'is_flapping' => 'service_is_flapping',
'percent_state_change' => 'service_percent_state_change',
'in_downtime' => 'service_in_downtime',
'passive_checks_enabled' => 'service_passive_checks_enabled',
'obsessing' => 'service_obsessing',
'notifications_enabled' => 'service_notifications_enabled',
'event_handler_enabled' => 'service_event_handler_enabled',
'flap_detection_enabled' => 'service_flap_detection_enabled',
'active_checks_enabled' => 'service_active_checks_enabled',
'last_comment' => 'service_last_comment',
'action_url' => 'service_action_url',
'notes_url' => 'service_notes_url'
)
)
->where('host_name', $this->name1)
->where('service_description', $this->name2)
->fetchRow();