commit
cc80440aea
|
@ -112,10 +112,12 @@ class ActionController extends Zend_Controller_Action
|
|||
$url = substr($url, strlen($this->getRequest()->getBaseUrl()));
|
||||
// the host is mandatory, but ignored in Zend
|
||||
$req = new Request('http://ignoredhost/' . $url);
|
||||
|
||||
$req->setBaseUrl($this->getRequest()->getBaseUrl());
|
||||
$router = Zend_Controller_Front::getInstance()->getRouter();
|
||||
$router->route($req);
|
||||
Zend_Controller_Front::getInstance()->setRequest($req);
|
||||
$detailHtml = $this->view->action($req->getActionName(), $req->getControllerName(), $req->getModuleName());
|
||||
Zend_Controller_Front::getInstance()->setRequest($this->getRequest());
|
||||
$this->_helper->layout->assign('detailContent', $detailHtml);
|
||||
$this->_helper->layout->assign('detailClass', 'col-sm-12 col-xs-12 col-md-12 col-lg-6');
|
||||
$this->_helper->layout->assign('mainClass', 'col-sm-12 col-xs-12 col-md-12 col-lg-6');
|
||||
|
|
|
@ -96,6 +96,13 @@ class Tab implements Widget
|
|||
*/
|
||||
private $iconCls = null;
|
||||
|
||||
/**
|
||||
* Additional a tag attributes
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $tagParams;
|
||||
|
||||
/**
|
||||
* Sets an icon image for this tab
|
||||
*
|
||||
|
@ -166,6 +173,16 @@ class Tab implements Widget
|
|||
$this->urlParams = $urlParams;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set additional a tag attributes
|
||||
*
|
||||
* @param array $tagParams
|
||||
*/
|
||||
public function setTagParams(array $tagParams)
|
||||
{
|
||||
$this->tagParams = $tagParams;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new Tab with the given properties
|
||||
*
|
||||
|
@ -215,7 +232,13 @@ class Tab implements Widget
|
|||
}
|
||||
if ($this->url !== null) {
|
||||
$this->url->overwriteParams($this->urlParams);
|
||||
$tab = '<a href="' . $this->url->getAbsoluteUrl() . '">' . $caption . '</a>';
|
||||
$tagParams = '';
|
||||
if ($this->tagParams !== null) {
|
||||
foreach ($this->tagParams as $key => $value) {
|
||||
$tagParams .= ' ' . $key . '="' . $value . '"';
|
||||
}
|
||||
}
|
||||
$tab = '<a' . $tagParams .' href="' . $this->url->getAbsoluteUrl() . '">' . $caption . '</a>';
|
||||
} else {
|
||||
$tab = $caption;
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
use \Icinga\Application\Benchmark;
|
||||
use \Icinga\Data\Db\Query;
|
||||
use \Icinga\File\Csv;
|
||||
use \Icinga\Web\Controller\ActionController;
|
||||
use \Icinga\Module\Monitoring\Controller as MonitoringController;
|
||||
use \Icinga\Web\Hook;
|
||||
use \Icinga\Web\Widget\Tabextension\DashboardAction;
|
||||
use \Icinga\Web\Widget\Tabextension\OutputFormat;
|
||||
|
@ -47,7 +47,7 @@ use Icinga\Module\Monitoring\DataView\Contactgroup as ContactgroupView;
|
|||
use Icinga\Module\Monitoring\DataView\HostAndServiceStatus as HostAndServiceStatusView;
|
||||
use Icinga\Module\Monitoring\DataView\Comment as CommentView;
|
||||
|
||||
class Monitoring_ListController extends ActionController
|
||||
class Monitoring_ListController extends MonitoringController
|
||||
{
|
||||
/**
|
||||
* The backend used for this controller
|
||||
|
@ -137,39 +137,7 @@ class Monitoring_ListController extends ActionController
|
|||
public function servicesAction()
|
||||
{
|
||||
$this->compactView = 'services-compact';
|
||||
$query = HostAndServiceStatusView::fromRequest(
|
||||
$this->_request,
|
||||
array(
|
||||
'host_name',
|
||||
'host_state',
|
||||
'host_state_type',
|
||||
'host_last_state_change',
|
||||
'host_address',
|
||||
'host_handled',
|
||||
'service_description',
|
||||
'service_display_name',
|
||||
'service_state' => 'service_state',
|
||||
'service_in_downtime',
|
||||
'service_acknowledged',
|
||||
'service_handled',
|
||||
'service_output',
|
||||
'service_last_state_change' => 'service_last_state_change',
|
||||
'service_icon_image',
|
||||
'service_long_output',
|
||||
'service_is_flapping',
|
||||
'service_state_type',
|
||||
'service_handled',
|
||||
'service_severity',
|
||||
'service_last_check',
|
||||
'service_notifications_enabled',
|
||||
'service_action_url',
|
||||
'service_notes_url',
|
||||
'service_last_comment',
|
||||
'service_active_checks_enabled',
|
||||
'service_passive_checks_enabled'
|
||||
)
|
||||
)->getQuery();
|
||||
$this->view->services = $query->paginate();
|
||||
$this->view->services = $this->fetchServices();
|
||||
$this->setupSortControl(array(
|
||||
'service_last_check' => 'Last Service Check',
|
||||
'service_severity' => 'Severity',
|
||||
|
@ -182,7 +150,6 @@ class Monitoring_ListController extends ActionController
|
|||
'host_address' => 'Host Address',
|
||||
'host_last_check' => 'Last Host Check'
|
||||
));
|
||||
$this->handleFormatRequest($query);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
|
||||
// @codingStandardsIgnoreStart
|
||||
use \Icinga\Module\Monitoring\Backend;
|
||||
use \Icinga\Web\Controller\ActionController;
|
||||
use Icinga\Module\Monitoring\Controller as MonitoringController;
|
||||
use \Icinga\Web\Hook;
|
||||
use \Icinga\Module\Monitoring\Object\Host;
|
||||
use \Icinga\Module\Monitoring\Object\Service;
|
||||
|
@ -43,7 +43,7 @@ use \Icinga\Web\Widget\Tabs;
|
|||
*
|
||||
* Actions for show context
|
||||
*/
|
||||
class Monitoring_ShowController extends ActionController
|
||||
class Monitoring_ShowController extends MonitoringController
|
||||
{
|
||||
/**
|
||||
* @var Backend
|
||||
|
@ -86,7 +86,6 @@ class Monitoring_ShowController extends ActionController
|
|||
public function serviceAction()
|
||||
{
|
||||
$this->view->object->prefetch();
|
||||
$this->view->object->eventHistory = $this->view->object->eventHistory->limit(10)->fetchAll();
|
||||
$this->view->preserve = array();
|
||||
}
|
||||
|
||||
|
@ -96,14 +95,27 @@ class Monitoring_ShowController extends ActionController
|
|||
public function hostAction()
|
||||
{
|
||||
$this->view->object->prefetch();
|
||||
$this->view->object->eventHistory = $this->view->object->eventHistory->limit(10)->fetchAll();
|
||||
$this->view->preserve = array();
|
||||
}
|
||||
|
||||
public function historyAction()
|
||||
{
|
||||
$this->view->object->fetchEventHistory();
|
||||
$this->view->history = $this->view->object->eventHistory->limit(10)->paginate();
|
||||
}
|
||||
|
||||
public function servicesAction()
|
||||
{
|
||||
$params = $this->_request->getParams();
|
||||
unset($params['service']);
|
||||
$this->view->services = $this->fetchServices($params);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* History entries for objects
|
||||
*/
|
||||
public function historyAction()
|
||||
/* public function historyAction()
|
||||
{
|
||||
$this->view->history = $this->backend->select()
|
||||
->from(
|
||||
|
@ -130,7 +142,7 @@ class Monitoring_ShowController extends ActionController
|
|||
$this->view->preserve['sort'] = $this->_getParam('sort');
|
||||
}
|
||||
$this->view->preserve = $this->view->history->getAppliedFilter()->toParams();
|
||||
}
|
||||
}*/
|
||||
|
||||
/**
|
||||
* Creating tabs for this controller
|
||||
|
@ -140,26 +152,66 @@ class Monitoring_ShowController extends ActionController
|
|||
{
|
||||
$object = $this->view->object;
|
||||
$tabs = $this->getTabs();
|
||||
if (!$this->view->host) {
|
||||
return $tabs;
|
||||
}
|
||||
$params = array(
|
||||
'host' => $this->view->host->host_name,
|
||||
'host' => $object->host_name,
|
||||
);
|
||||
if ($backend = $this->_getParam('backend')) {
|
||||
$params['backend'] = $backend;
|
||||
}
|
||||
if ($object instanceof Service) {
|
||||
$params['service'] = $object->service_description;
|
||||
} elseif ($service = $this->_getParam('service')) {
|
||||
$params['service'] = $service;
|
||||
}
|
||||
|
||||
if (isset($params['service'])) {
|
||||
$tabs->add(
|
||||
'service',
|
||||
array(
|
||||
'title' => 'Service',
|
||||
'icon' => '',
|
||||
'url' => 'monitoring/show/service',
|
||||
'urlParams' => $params,
|
||||
'tagParams' => array(
|
||||
'data-icinga-target' => 'detail'
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
$tabs->add(
|
||||
'host',
|
||||
array(
|
||||
'title' => 'Host',
|
||||
'icon' => '',
|
||||
'url' => 'monitoring/show/host',
|
||||
'urlParams' => $params,
|
||||
'tagParams' => array(
|
||||
'data-icinga-target' => 'detail'
|
||||
)
|
||||
)
|
||||
);
|
||||
$tabs->add(
|
||||
'services',
|
||||
array(
|
||||
'title' => 'Services',
|
||||
'icon' => 'img/classic/service.png',
|
||||
'url' => 'monitoring/show/services',
|
||||
'urlParams' => $params,
|
||||
'tagParams' => array(
|
||||
'data-icinga-target' => 'detail'
|
||||
)
|
||||
)
|
||||
);
|
||||
$tabs->add(
|
||||
'history',
|
||||
array(
|
||||
'title' => 'History',
|
||||
'icon' => '',
|
||||
'url' => 'monitoring/show/history',
|
||||
'urlParams' => $params,
|
||||
'tagParams' => array(
|
||||
'data-icinga-target' => 'detail'
|
||||
)
|
||||
)
|
||||
);
|
||||
$tabs->extend(new OutputFormat())
|
||||
->extend(new DashboardAction())
|
||||
->extend(new BasketAction);
|
||||
|
||||
return $tabs;
|
||||
->extend(new DashboardAction());
|
||||
}
|
||||
}
|
||||
// @codingStandardsIgnoreEnd
|
||||
|
|
|
@ -8,7 +8,7 @@ $viewHelper = $this->getHelper('MonitoringState');
|
|||
<div data-icinga-component="app/mainDetailGrid">
|
||||
|
||||
<?= $this->sortControl->render($this); ?>
|
||||
<?= $this->paginationControl($this->services, null, null, array('preserve' => $this->preserve)); ?>
|
||||
<?= $this->paginationControl($services, null, null, array('preserve' => $this->preserve)); ?>
|
||||
|
||||
<table class="table table-condensed">
|
||||
<thead>
|
||||
|
|
|
@ -1,29 +1,19 @@
|
|||
<?php if (!empty($object->comments)): ?>
|
||||
<?
|
||||
$commets = array();
|
||||
foreach ($object->comments as $comment) {
|
||||
$text = $this->escape($comment->comment_data);
|
||||
$commets[] = sprintf(
|
||||
'[%s] %s (%s): %s',
|
||||
$this->escape($comment->comment_author),
|
||||
$this->format()->timeSince($comment->comment_timestamp),
|
||||
$comment->comment_type,
|
||||
$text
|
||||
);
|
||||
}
|
||||
?>
|
||||
<?php endif; ?>
|
||||
<div class="panel panel-default ">
|
||||
<div class="panel-heading">
|
||||
<span>{{COMMENT_ICON}} Comments</span>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<a href="#" class="button">{{COMMENT_COMMAND_BUTTON}}</a>
|
||||
<a href="#" class="button">{{NOTIFICATION_COMMAND_BUTTON}}</a><br/>
|
||||
<?php if (!empty($object->comments)): ?>
|
||||
<blockquote> <?= implode('<br />', $commets); ?><a href="#" class="button">{{REMOVE_COMMENT_COMMAND}}</a></blockquote>
|
||||
<?php else: ?>
|
||||
No comments
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div>
|
||||
Comments
|
||||
<?php if (!empty($object->comments)): ?>
|
||||
<blockquote>
|
||||
<?php foreach ($object->comments as $comment): ?>
|
||||
<p>
|
||||
<?= sprintf(
|
||||
'[%s] %s (%s): %s',
|
||||
$this->escape($comment->comment_author),
|
||||
$this->format()->timeSince($comment->comment_timestamp),
|
||||
$comment->comment_type,
|
||||
$comment->comment_data
|
||||
); ?>
|
||||
<a href="#" class="button">{{REMOVE_ICON}}</a>
|
||||
</p>
|
||||
<?php endforeach; ?>
|
||||
</blockquote>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
|
|
@ -1,103 +0,0 @@
|
|||
<?php if (!empty($object->eventHistory)): ?>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<span>History</span>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<table class="table table-condensed">
|
||||
<tbody>
|
||||
<?php foreach ($object->eventHistory as $event): ?>
|
||||
<tr>
|
||||
<td><?= date('d.m. H:i', $event->timestamp); ?></td>
|
||||
|
||||
<td>
|
||||
<?php if ($object instanceof Icinga\Module\Monitoring\Object\Service): ?>
|
||||
<a href="<?= $this->href('monitoring/show/service', array(
|
||||
'host' => $object->host_name,
|
||||
'service' => $event->service_description
|
||||
)); ?>">
|
||||
<?= $event->service_description ?>
|
||||
</a>
|
||||
<?php else: ?>
|
||||
<a href="<?= $this->href('monitoring/show/host', array(
|
||||
'host' => $object->host_name
|
||||
)); ?>">
|
||||
<?= $event->host_name ?>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<?php
|
||||
switch ($event->type) {
|
||||
case 'notify':
|
||||
$icon = '{{NOTIFICATION_ICON}}';
|
||||
$title = 'Notification';
|
||||
$msg = $event->output;
|
||||
break;
|
||||
case 'comment':
|
||||
$icon = '{{COMMENT_ICON}}';
|
||||
$title = 'Comment';
|
||||
$msg = $event->output;
|
||||
break;
|
||||
case 'ack':
|
||||
$icon = '{{ACKNOWLEDGEMENT_ICON}}';
|
||||
$title = 'Acknowledgement';
|
||||
$msg = '';
|
||||
break;
|
||||
case 'dt_comment':
|
||||
$icon = '{{IN_DOWNTIME_ICON}}';
|
||||
$title = 'In Downtime';
|
||||
$msg = $event->output;
|
||||
break;
|
||||
case 'flapping':
|
||||
$icon = '{{FLAPPING_ICON}}';
|
||||
$title = 'Flapping';
|
||||
$msg = '';
|
||||
break;
|
||||
case 'hard_state':
|
||||
$icon = '{{HARDSTATE_ICON}}';
|
||||
$title = 'Hard State';
|
||||
$msg = '[' . $event->attempt . '/' . $event->max_attempts . ']';
|
||||
break;
|
||||
case 'soft_state':
|
||||
$icon = '{{SOFTSTATE_ICON}}';
|
||||
$title = 'Soft State';
|
||||
$msg = '[' . $event->attempt . '/' . $event->max_attempts . ']';
|
||||
break;
|
||||
case 'dt_start':
|
||||
$icon = '{{DOWNTIME_START_ICON}}';
|
||||
$title = 'Downtime Start';
|
||||
$msg = $event->output;
|
||||
break;
|
||||
case 'dt_end':
|
||||
$icon = '{{DOWNTIME_END_ICON}}';
|
||||
$title = 'Downtime End';
|
||||
$msg = $event->output;
|
||||
break;
|
||||
}
|
||||
?>
|
||||
<a href="#" title="<?= $title ?>"><i><?= $icon ?></i></a>
|
||||
<?php if (!empty($msg)) { echo $msg; } ?>
|
||||
</td>
|
||||
</tr>
|
||||
<? endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php if ($object instanceof Icinga\Module\Monitoring\Object\Service): ?>
|
||||
<a href="<?= $this->href('monitoring/list/eventhistory', array(
|
||||
'host' => $object->host_name,
|
||||
'service' => $object->service_description
|
||||
)); ?>">
|
||||
All events for <?= $event->service_description ?>
|
||||
</a>
|
||||
<?php else: ?>
|
||||
<a href="<?= $this->href('monitoring/list/eventhistory', array(
|
||||
'host' => $object->host_name
|
||||
)); ?>">
|
||||
All events for <?= $event->host_name ?>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
|
@ -1,15 +1,93 @@
|
|||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<span>Properties</span>
|
||||
</div>
|
||||
<div class="panel-heading">Properties</div>
|
||||
<div class="panel-body">
|
||||
<table class="table table-bordered">
|
||||
<?php foreach ($this->monitoringProperties($object) as $label => $value): ?>
|
||||
<tr>
|
||||
<th><?= $label ?></th>
|
||||
<td><?= $value ?></td>
|
||||
<th>Current Attempt</th>
|
||||
<td>
|
||||
<?= sprintf(
|
||||
'%s/%s (%s state)',
|
||||
$object->current_check_attempt,
|
||||
$object->max_check_attempts,
|
||||
($object->state_type === '1') ? 'HARD' : 'SOFT'
|
||||
); ?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Check Type</th>
|
||||
<td>
|
||||
<?php if ($object->passive_checks_enabled === '1' && $object->active_checks_enabled === '0'): ?>
|
||||
PASSIVE
|
||||
<?php elseif ($object->passive_checks_enabled === '0' && $object->active_checks_enabled === '0'): ?>
|
||||
DISABLED
|
||||
<?php else: ?>
|
||||
ACTIVE
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Check Latency / Duration</th>
|
||||
<td>
|
||||
<?php if ($object->passive_checks_enabled === '0' && $object->active_checks_enabled === '0'): ?>
|
||||
N/A
|
||||
<?php else: ?>
|
||||
<?= sprintf('%.4f', $object->check_latency); ?> / <?= sprintf('%.4f', $object->check_execution_time); ?> seconds
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Last Notification</th>
|
||||
<td>
|
||||
<?php
|
||||
if ($object->service_description) {
|
||||
$notificationsHref = $this->href('monitoring/list/notifications',
|
||||
array(
|
||||
'host' => $object->host_name,
|
||||
'service' => $object->service_description
|
||||
)
|
||||
);
|
||||
} else {
|
||||
$notificationsHref = $this->href('monitoring/list/notifications',
|
||||
array(
|
||||
'host' => $object->host_name
|
||||
)
|
||||
);
|
||||
}
|
||||
?>
|
||||
<a href="<?= $notificationsHref ?>">
|
||||
<?php if ($object->last_notification === '0000-00-00 00:00:00'): ?>
|
||||
N/A
|
||||
<?php else: ?>
|
||||
<?= $object->last_notification ?>
|
||||
<?php if ($object->current_notification_number > 0): ?>
|
||||
<br />
|
||||
<?= $object->current_notification_number ?> notifications sent during current problem state
|
||||
<?php endif ;?>
|
||||
<?php endif; ?>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Is This <?= $object->service_description ? 'Service' : 'Host' ?> Flapping?</th>
|
||||
<td>
|
||||
<?php if ($object->is_flapping === '1'): ?>
|
||||
YES
|
||||
<?php else: ?>
|
||||
NO
|
||||
<?php endif; ?>
|
||||
<?= sprintf('%.2f', $object->percent_state_change); ?>% state change
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>In Scheduled Downtime?</th>
|
||||
<td>
|
||||
<?php if ($object->in_downtime === '1'): ?>
|
||||
YES
|
||||
<?php else: ?>
|
||||
NO
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,7 +1,103 @@
|
|||
<?= $this->render('show/components/header.phtml') ?>
|
||||
<?php
|
||||
$history->limit(10);
|
||||
$hhistory = $this->history->paginate();
|
||||
<?= $this->tabs->render($this); ?>
|
||||
|
||||
?>
|
||||
<h1>History</h1>
|
||||
|
||||
<?php if (!empty($history)): ?>
|
||||
<div data-icinga-component="app/mainDetailGrid">
|
||||
<?= $this->paginationControl($history, null, null, array('preserve' => $this->preserve)); ?>
|
||||
<table class="table table-condensed">
|
||||
<tbody>
|
||||
<?php foreach ($history as $event): ?>
|
||||
<tr>
|
||||
<td><?= date('d.m. H:i', $event->timestamp); ?></td>
|
||||
|
||||
<td>
|
||||
<?php if ($object instanceof Icinga\Module\Monitoring\Object\Service): ?>
|
||||
<a href="<?= $this->href('monitoring/show/service', array(
|
||||
'host' => $object->host_name,
|
||||
'service' => $event->service_description
|
||||
)); ?>">
|
||||
<?= $event->service_description ?>
|
||||
</a>
|
||||
<?php else: ?>
|
||||
<a href="<?= $this->href('monitoring/show/host', array(
|
||||
'host' => $object->host_name
|
||||
)); ?>">
|
||||
<?= $event->host_name ?>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<?php
|
||||
switch ($event->type) {
|
||||
case 'notify':
|
||||
$icon = '{{NOTIFICATION_ICON}}';
|
||||
$title = 'Notification';
|
||||
$msg = $event->output;
|
||||
break;
|
||||
case 'comment':
|
||||
$icon = '{{COMMENT_ICON}}';
|
||||
$title = 'Comment';
|
||||
$msg = $event->output;
|
||||
break;
|
||||
case 'ack':
|
||||
$icon = '{{ACKNOWLEDGEMENT_ICON}}';
|
||||
$title = 'Acknowledgement';
|
||||
$msg = '';
|
||||
break;
|
||||
case 'dt_comment':
|
||||
$icon = '{{IN_DOWNTIME_ICON}}';
|
||||
$title = 'In Downtime';
|
||||
$msg = $event->output;
|
||||
break;
|
||||
case 'flapping':
|
||||
$icon = '{{FLAPPING_ICON}}';
|
||||
$title = 'Flapping';
|
||||
$msg = '';
|
||||
break;
|
||||
case 'hard_state':
|
||||
$icon = '{{HARDSTATE_ICON}}';
|
||||
$title = 'Hard State';
|
||||
$msg = '[' . $event->attempt . '/' . $event->max_attempts . ']';
|
||||
break;
|
||||
case 'soft_state':
|
||||
$icon = '{{SOFTSTATE_ICON}}';
|
||||
$title = 'Soft State';
|
||||
$msg = '[' . $event->attempt . '/' . $event->max_attempts . ']';
|
||||
break;
|
||||
case 'dt_start':
|
||||
$icon = '{{DOWNTIME_START_ICON}}';
|
||||
$title = 'Downtime Start';
|
||||
$msg = $event->output;
|
||||
break;
|
||||
case 'dt_end':
|
||||
$icon = '{{DOWNTIME_END_ICON}}';
|
||||
$title = 'Downtime End';
|
||||
$msg = $event->output;
|
||||
break;
|
||||
}
|
||||
?>
|
||||
<a href="#" title="<?= $title ?>"><i><?= $icon ?></i></a>
|
||||
<?php if (!empty($msg)) { echo $msg; } ?>
|
||||
</td>
|
||||
</tr>
|
||||
<? endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php if ($object instanceof Icinga\Module\Monitoring\Object\Service): ?>
|
||||
<a href="<?= $this->href('monitoring/list/eventhistory', array(
|
||||
'host' => $object->host_name,
|
||||
'service' => $object->service_description
|
||||
)); ?>">
|
||||
All events for <?= $event->service_description ?>
|
||||
</a>
|
||||
<?php else: ?>
|
||||
<a href="<?= $this->href('monitoring/list/eventhistory', array(
|
||||
'host' => $object->host_name
|
||||
)); ?>">
|
||||
All events for <?= $event->host_name ?>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
|
|
@ -1,15 +1,61 @@
|
|||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<?= $this->tabs->render($this); ?>
|
||||
|
||||
<div>
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
<?php if ($this->object->host_icon_image): ?>
|
||||
<img src="<?= $this->object->host_icon_image; ?>" alt="Host image" />
|
||||
<?php else: ?>
|
||||
{{HOST_ICON}}
|
||||
<?php endif; ?>
|
||||
<h1>Host Status <?= $this->escape($this->object->host_name); ?></h1>
|
||||
<h4>
|
||||
Host Status
|
||||
<a href="<?= $this->href('monitoring/list/services', array('host' => $object->host_name)); ?>">
|
||||
<?= $this->escape($this->object->host_name); ?>
|
||||
</a>
|
||||
<?php if ($this->object->host_address && $this->object->host_address !== $this->object->host_name): ?>
|
||||
(<?= $this->object->host_address; ?>)
|
||||
<?php endif; ?>
|
||||
<?php if (isset($this->object->host_alias) && $this->object->host_alias !== $this->object->host_name): ?>
|
||||
(<?= $this->object->host_alias; ?>)
|
||||
<?php endif; ?>
|
||||
</h4>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<?= $this->util()->getHostStateName($this->object->host_state); ?>
|
||||
since <?= $this->timeSince($this->object->host_last_state_change); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div>
|
||||
<?= $this->pluginOutput($this->object->output); ?>
|
||||
</div>
|
||||
|
||||
<a class="button" href="#">{{RECHECK_COMMAND}</a>
|
||||
|
||||
<div>
|
||||
<?= $this->perfdata($this->object->perfdata); ?>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<?= $this->pluginOutput($this->object->long_output); ?>
|
||||
</div>
|
||||
|
||||
<?= $this->render('show/components/comments.phtml'); ?>
|
||||
|
||||
<div>
|
||||
Check Statistics
|
||||
<dl class="dl-horizontal">
|
||||
<dt>Last Check</dt>
|
||||
<dd><?= $object->last_check; ?></dd>
|
||||
<dt>Next Check</dt>
|
||||
<dd><?= $object->next_check; ?> <a href="#" class="button">{{RESCHEDULE_COMMAND}}</a></dd>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<table>
|
||||
<i class="successIcon"></i>
|
||||
<tr>
|
||||
<?php if (!$object->host_handled && $object->host_state > 0): ?>
|
||||
<td>
|
||||
|
@ -27,37 +73,19 @@
|
|||
<i>{{ACKNOWLEDGED_ICON}}</i>
|
||||
</a>
|
||||
</td>
|
||||
<?php else: ?>
|
||||
<td>
|
||||
Status
|
||||
</td>
|
||||
<?php endif; ?>
|
||||
<td>
|
||||
<?= $this->util()->getHostStateName($this->object->host_state); ?>
|
||||
since <?= $this->timeSince($this->object->host_last_state_change); ?>
|
||||
</td>
|
||||
<td><a class="button" href="#">{{RECHECK_COMMAND_BUTTON}</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Last Check</td>
|
||||
<td><?= $object->last_check ?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Next Check</td>
|
||||
<td><?= $object->next_check ?></td>
|
||||
<td><a href="#" class="button">{{RESCHEDULE_COMMAND_BUTTON}}</a></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<?php if ($this->object->host_address && $this->object->host_address !== $this->object->host_name): ?>
|
||||
|
||||
<tr>
|
||||
<td>Host Address</td>
|
||||
<td><?= $this->escape($this->object->host_address); ?></td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($this->object->host_alias) && $this->object->host_alias !== $this->object->host_name): ?>
|
||||
<tr>
|
||||
<td>Alias</td>
|
||||
<td><?= $this->object->host_alias; ?></td>
|
||||
<?php endif; ?>
|
||||
<?php if ($this->object->host_action_url || $this->object->host_notes_url): ?>
|
||||
<tr>
|
||||
<td rowspan="2">
|
||||
|
@ -70,40 +98,18 @@
|
|||
</td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
<tr>
|
||||
<td>Plugin Output</td>
|
||||
<td>
|
||||
<?= $this->pluginOutput($this->object->output); ?>
|
||||
<?= $this->pluginOutput($this->object->long_output); ?>
|
||||
</td>
|
||||
<td>
|
||||
<a class="button" href="#">{{SUBMIT_PASSIVE_CHECK_RESULT_COMMAND}}</a>
|
||||
</td>
|
||||
</tr>
|
||||
<?php if ($this->object->perfdata): ?>
|
||||
<tr>
|
||||
<td>Performance Data</td>
|
||||
<td><?= $this->perfdata($this->object->perfdata); ?></td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<a href="<?= $this->href('monitoring/list/services', array('host' => $object->host_name)); ?>">
|
||||
View Services For This Host
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a class="button" href="#">{{{RECHECK_ALL_SERVICES_COMMAND}}</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?= $this->render('show/components/downtime.phtml'); ?>
|
||||
|
||||
<?= $this->render('show/components/comments.phtml'); ?>
|
||||
|
||||
<?= $this->render('show/components/properties.phtml'); ?>
|
||||
|
||||
<?= $this->render('show/components/flags.phtml'); ?>
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
<?= $this->tabs->render($this); ?>
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
{{SERVICE_ICON}} <h1>Service Status <?= $this->escape($this->object->service_description); ?></h1>
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
<?= $this->tabs->render($this); ?>
|
||||
<?= $this->partial(
|
||||
'list/services-compact.phtml',
|
||||
'monitoring', array(
|
||||
'services' => $services
|
||||
)
|
||||
); ?>
|
|
@ -0,0 +1,93 @@
|
|||
<?php
|
||||
// {{{ICINGA_LICENSE_HEADER}}}
|
||||
// {{{ICINGA_LICENSE_HEADER}}}
|
||||
|
||||
namespace Icinga\Module\Monitoring;
|
||||
|
||||
use Icinga\Application\Config as IcingaConfig;
|
||||
use Icinga\Module\Monitoring\DataView\HostAndServiceStatus as HostAndServiceStatusView;
|
||||
use Icinga\Web\Controller\ActionController;
|
||||
|
||||
/**
|
||||
* Base class for all monitoring action controller
|
||||
*/
|
||||
class Controller extends ActionController
|
||||
{
|
||||
/**
|
||||
* Retrieve services from either given parameters or request
|
||||
*
|
||||
* @param array $params
|
||||
*
|
||||
* @return \Zend_Paginator
|
||||
*/
|
||||
protected function fetchServices(array $params = null)
|
||||
{
|
||||
$columns = array(
|
||||
'host_name',
|
||||
'host_state',
|
||||
'host_state_type',
|
||||
'host_last_state_change',
|
||||
'host_address',
|
||||
'host_handled',
|
||||
'service_description',
|
||||
'service_display_name',
|
||||
'service_state',
|
||||
'service_in_downtime',
|
||||
'service_acknowledged',
|
||||
'service_handled',
|
||||
'service_output',
|
||||
'service_last_state_change',
|
||||
'service_icon_image',
|
||||
'service_long_output',
|
||||
'service_is_flapping',
|
||||
'service_state_type',
|
||||
'service_handled',
|
||||
'service_severity',
|
||||
'service_last_check',
|
||||
'service_notifications_enabled',
|
||||
'service_action_url',
|
||||
'service_notes_url',
|
||||
'service_last_comment',
|
||||
'service_active_checks_enabled',
|
||||
'service_passive_checks_enabled'
|
||||
);
|
||||
if ($params === null) {
|
||||
$query = HostAndServiceStatusView::fromRequest(
|
||||
$this->_request,
|
||||
$columns
|
||||
)->getQuery();
|
||||
} else {
|
||||
$params['backend'] = $this->_request->getParam('backend');
|
||||
$query = HostAndServiceStatusView::fromParams(
|
||||
$params,
|
||||
$columns
|
||||
)->getQuery();
|
||||
}
|
||||
$this->handleFormatRequest($query);
|
||||
return $query->paginate();
|
||||
}
|
||||
|
||||
private function handleFormatRequest($query)
|
||||
{
|
||||
if ($this->_getParam('format') === 'sql'
|
||||
&& IcingaConfig::app()->global->get('environment', 'production') === 'development') {
|
||||
echo '<pre>'
|
||||
. htmlspecialchars(wordwrap($query->dump()))
|
||||
. '</pre>';
|
||||
exit;
|
||||
}
|
||||
if ($this->_getParam('format') === 'json'
|
||||
|| $this->_request->getHeader('Accept') === 'application/json')
|
||||
{
|
||||
header('Content-type: application/json');
|
||||
echo json_encode($query->fetchAll());
|
||||
exit;
|
||||
}
|
||||
if ($this->_getParam('format') === 'csv'
|
||||
|| $this->_request->getHeader('Accept') === 'text/csv') {
|
||||
Csv::fromQuery($query)->dump();
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
// @codingStandardsIgnoreEnd
|
|
@ -99,6 +99,33 @@ abstract class DataView
|
|||
return $view;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create view from params
|
||||
*
|
||||
* @param array $params
|
||||
* @param array $columns
|
||||
*
|
||||
* @return static
|
||||
*/
|
||||
public static function fromParams(array $params, array $columns = null)
|
||||
{
|
||||
$view = new static(Backend::createBackend($params['backend']), $columns);
|
||||
$view->filter($params);
|
||||
$order = isset($params['order']) ? $params['order'] : null;
|
||||
if ($order !== null) {
|
||||
if (strtolower($order) === 'desc') {
|
||||
$order = self::SORT_DESC;
|
||||
} else {
|
||||
$order = self::SORT_ASC;
|
||||
}
|
||||
}
|
||||
$view->sort(
|
||||
isset($params['sort']) ? $params['sort'] : null,
|
||||
$order
|
||||
);
|
||||
return $view;
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter rows that match all of the given filters. If a filter is not valid, it's silently ignored
|
||||
*
|
||||
|
|
|
@ -150,7 +150,7 @@ abstract class AbstractObject
|
|||
return $this;
|
||||
}
|
||||
|
||||
protected function fetchEventHistory()
|
||||
public function fetchEventHistory()
|
||||
{
|
||||
$this->foreign['eventHistory'] = $this->applyObjectFilter(
|
||||
$this->backend->select()->from('eventHistory', array(
|
||||
|
|
|
@ -30,8 +30,7 @@ class Host extends AbstractObject
|
|||
->fetchContacts()
|
||||
->fetchContactgroups()
|
||||
->fetchCustomvars()
|
||||
->fetchComments()
|
||||
->fetchEventHistory();
|
||||
->fetchComments();
|
||||
}
|
||||
|
||||
protected function fetchObject()
|
||||
|
@ -42,7 +41,7 @@ class Host extends AbstractObject
|
|||
'host_address',
|
||||
'host_state',
|
||||
'host_handled',
|
||||
'host_in_downtime',
|
||||
'in_downtime' => 'host_in_downtime',
|
||||
'host_acknowledged',
|
||||
'host_last_state_change',
|
||||
'last_check' => 'host_last_check',
|
||||
|
@ -59,7 +58,13 @@ class Host extends AbstractObject
|
|||
'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'
|
||||
'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'
|
||||
))->where('host_name', $this->name1)->fetchRow();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,8 +31,7 @@ class Service extends AbstractObject
|
|||
->fetchContacts()
|
||||
->fetchContactgroups()
|
||||
->fetchCustomvars()
|
||||
->fetchComments()
|
||||
->fetchEventHistory();
|
||||
->fetchComments();
|
||||
}
|
||||
|
||||
protected function fetchObject()
|
||||
|
|
|
@ -488,10 +488,15 @@ define(['jquery', 'logging', 'icinga/componentLoader', 'URIjs/URI', 'URIjs/URITe
|
|||
if (Container.isExternalLink($(targetEl).attr('href'))) {
|
||||
return true;
|
||||
} else {
|
||||
// detail links render to main by default;
|
||||
Icinga.replaceBodyFromUrl(
|
||||
mainContainer.updateContainerHref(URI($(targetEl).attr('href')).href())
|
||||
);
|
||||
if ($(targetEl).attr('data-icinga-target') === 'detail') {
|
||||
Icinga.replaceBodyFromUrl(
|
||||
detailContainer.updateContainerHref(URI($(targetEl).attr('href')).href())
|
||||
);
|
||||
} else {
|
||||
Icinga.replaceBodyFromUrl(
|
||||
mainContainer.updateContainerHref(URI($(targetEl).attr('href')).href())
|
||||
);
|
||||
}
|
||||
|
||||
ev.preventDefault();
|
||||
ev.stopPropagation();
|
||||
|
@ -512,4 +517,4 @@ define(['jquery', 'logging', 'icinga/componentLoader', 'URIjs/URI', 'URIjs/URITe
|
|||
};
|
||||
|
||||
return Container;
|
||||
});
|
||||
});
|
||||
|
|
|
@ -166,10 +166,16 @@ function(Container, $, logger, URI) {
|
|||
|
||||
});
|
||||
$('.pagination li a', contentNode.parent()).on('click', function(ev) {
|
||||
|
||||
var container = (new Container(this));
|
||||
container.replaceDomFromUrl(
|
||||
container.updateContainerHref($(this).attr('href'))
|
||||
);
|
||||
logger.debug("Pagination clicked in " + container.containerType);
|
||||
// Detail will be removed when main pagination changes
|
||||
if (container.containerType === 'icingamain') {
|
||||
Icinga.replaceBodyFromUrl(URI($(this).attr('href')).removeQuery('detail'));
|
||||
} else {
|
||||
container.replaceDomFromUrl($(this).attr('href'));
|
||||
}
|
||||
|
||||
ev.preventDefault();
|
||||
ev.stopPropagation();
|
||||
return false;
|
||||
|
@ -207,7 +213,7 @@ function(Container, $, logger, URI) {
|
|||
this.registerControls();
|
||||
this.registerTableLinks();
|
||||
this.registerHistoryChanges();
|
||||
this.registerLoadIndicator();
|
||||
|
||||
};
|
||||
|
||||
this.construct(gridDomNode);
|
||||
|
|
Loading…
Reference in New Issue