mirror of
https://github.com/Icinga/icingaweb2.git
synced 2025-07-27 07:44:04 +02:00
parent
4133d0093d
commit
9cba03b017
@ -27,13 +27,13 @@
|
|||||||
// {{{ICINGA_LICENSE_HEADER}}}
|
// {{{ICINGA_LICENSE_HEADER}}}
|
||||||
|
|
||||||
use \Icinga\Web\Form;
|
use \Icinga\Web\Form;
|
||||||
|
use \Icinga\Web\Controller\ActionController;
|
||||||
use \Icinga\Module\Monitoring\Backend;
|
use \Icinga\Module\Monitoring\Backend;
|
||||||
use \Icinga\Module\Monitoring\Object\Host;
|
use \Icinga\Module\Monitoring\Object\Host;
|
||||||
use \Icinga\Module\Monitoring\Object\Service;
|
use \Icinga\Module\Monitoring\Object\Service;
|
||||||
use \Icinga\Module\Monitoring\Form\Command\MultiCommandFlagForm;
|
use \Icinga\Module\Monitoring\Form\Command\MultiCommandFlagForm;
|
||||||
use \Icinga\Module\Monitoring\DataView\HostAndServiceStatus as HostAndServiceStatusView;
|
use \Icinga\Module\Monitoring\DataView\HostAndServiceStatus as HostAndServiceStatusView;
|
||||||
use \Icinga\Module\Monitoring\DataView\Comment as CommentView;
|
use \Icinga\Module\Monitoring\DataView\Comment as CommentView;
|
||||||
use \Icinga\Web\Controller\ActionController;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Displays aggregations collections of multiple objects.
|
* Displays aggregations collections of multiple objects.
|
||||||
@ -43,7 +43,6 @@ class Monitoring_MultiController extends ActionController
|
|||||||
public function init()
|
public function init()
|
||||||
{
|
{
|
||||||
$this->view->queries = $this->getDetailQueries();
|
$this->view->queries = $this->getDetailQueries();
|
||||||
$this->view->wildcard = false;
|
|
||||||
$this->backend = Backend::createBackend($this->_getParam('backend'));
|
$this->backend = Backend::createBackend($this->_getParam('backend'));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,7 +86,7 @@ class Monitoring_MultiController extends ActionController
|
|||||||
}
|
}
|
||||||
$this->view->objects = $this->view->hosts = $hosts;
|
$this->view->objects = $this->view->hosts = $hosts;
|
||||||
$this->view->comments = isset($comments) ? $comments : $this->getComments($hosts);
|
$this->view->comments = isset($comments) ? $comments : $this->getComments($hosts);
|
||||||
$this->view->hostnames = $this->getHostnames($hosts);
|
$this->view->hostnames = $this->getProperties($hosts, 'host_name');
|
||||||
$this->view->downtimes = $this->getDowntimes($hosts);
|
$this->view->downtimes = $this->getDowntimes($hosts);
|
||||||
$this->view->errors = $errors;
|
$this->view->errors = $errors;
|
||||||
|
|
||||||
@ -108,7 +107,11 @@ class Monitoring_MultiController extends ActionController
|
|||||||
$unique = array();
|
$unique = array();
|
||||||
foreach ($values as $value)
|
foreach ($values as $value)
|
||||||
{
|
{
|
||||||
$unique[$value->{$key}] = null;
|
if (is_array($value)) {
|
||||||
|
$unique[$value[$key]] = $value[$key];
|
||||||
|
} else {
|
||||||
|
$unique[$value->{$key}] = $value->{$key};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return $unique;
|
return $unique;
|
||||||
}
|
}
|
||||||
@ -117,16 +120,16 @@ class Monitoring_MultiController extends ActionController
|
|||||||
{
|
{
|
||||||
$unique = array();
|
$unique = array();
|
||||||
foreach ($objects as $object) {
|
foreach ($objects as $object) {
|
||||||
$unique = array_merge($this->getUniqueValues($object->comments, 'comment_id'));
|
$unique = array_merge($unique, $this->getUniqueValues($object->comments, 'comment_internal_id'));
|
||||||
}
|
}
|
||||||
return array_keys($unique);
|
return array_keys($unique);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getHostnames($objects)
|
private function getProperties($objects, $property)
|
||||||
{
|
{
|
||||||
$objectnames = array();
|
$objectnames = array();
|
||||||
foreach ($objects as $object) {
|
foreach ($objects as $object) {
|
||||||
$objectnames[] = $object->host_name;
|
$objectnames[] = $object->{$property};
|
||||||
}
|
}
|
||||||
return $objectnames;
|
return $objectnames;
|
||||||
}
|
}
|
||||||
@ -190,7 +193,8 @@ class Monitoring_MultiController extends ActionController
|
|||||||
}
|
}
|
||||||
$this->view->objects = $this->view->services = $services;
|
$this->view->objects = $this->view->services = $services;
|
||||||
$this->view->comments = isset($comments) ? $comments : $this->getComments($services);
|
$this->view->comments = isset($comments) ? $comments : $this->getComments($services);
|
||||||
$this->view->hostnames = $this->getHostnames($services);
|
$this->view->hostnames = $this->getProperties($services, 'host_name');
|
||||||
|
$this->view->servicenames = $this->getProperties($services, 'service_description');
|
||||||
$this->view->downtimes = $this->getDowntimes($services);
|
$this->view->downtimes = $this->getDowntimes($services);
|
||||||
$this->view->errors = $errors;
|
$this->view->errors = $errors;
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ $viewHelper = $this->getHelper('MonitoringState');
|
|||||||
|
|
||||||
<h1>Comments</h1>
|
<h1>Comments</h1>
|
||||||
|
|
||||||
<div data-icinga-component="app/mainDetailGrid" data-icinga-grid-selection-type="multi">
|
<div data-icinga-component="app/mainDetailGrid" data-icinga-grid-selection-type="single">
|
||||||
<?= $this->sortControl->render($this); ?>
|
<?= $this->sortControl->render($this); ?>
|
||||||
<?= $this->paginationControl($comments, null, null, array('preserve' => $this->preserve)); ?>
|
<?= $this->paginationControl($comments, null, null, array('preserve' => $this->preserve)); ?>
|
||||||
|
|
||||||
|
@ -1,24 +1,64 @@
|
|||||||
<div class="panel panel-default ">
|
<div class="panel panel-default ">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<span> {{COMMENT_ICON}} Comments </span>
|
<span> Comments </span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
|
|
||||||
|
<div class="panel-row">
|
||||||
|
<?php if (count($comments) > 0) { ?>
|
||||||
<a href=" <?=
|
<a href=" <?=
|
||||||
$this->href(
|
$this->href(
|
||||||
'monitoring/list/comments',
|
'monitoring/list/comments',
|
||||||
array(
|
array(
|
||||||
'comment_id' => implode(',', $comments)
|
'comment_id' => implode(',', $this->comments)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
?>">
|
?>">
|
||||||
<?= count($comments);?> comments are present in the selected items.
|
<?= count($comments);?> comments in the selected items.
|
||||||
|
</a>
|
||||||
|
<a href="<?=
|
||||||
|
$this->href(
|
||||||
|
'monitoring/command/removecomment',
|
||||||
|
$this->target
|
||||||
|
);
|
||||||
|
?>" class="button btn-common btn-small input-sm pull-right">
|
||||||
|
<i class="icinga-icon-remove"></i>
|
||||||
|
</a>
|
||||||
|
<?php } else { ?>
|
||||||
|
0 comments in the selected items.
|
||||||
|
<?php } ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="panel-row">
|
||||||
|
<a href="<?=
|
||||||
|
$this->href(
|
||||||
|
'monitoring/command/sendcustomnotification',
|
||||||
|
$this->target
|
||||||
|
);
|
||||||
|
?>" class="button btn-cta btn-common btn-wide">
|
||||||
|
Add Comments
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="panel-row">
|
||||||
|
<a href="<?=
|
||||||
|
$this->href(
|
||||||
|
'monitoring/command/sendcustomnotification',
|
||||||
|
$this->target
|
||||||
|
);
|
||||||
|
?>" class="button btn-cta btn-common btn-half-left">
|
||||||
|
Send Notifications
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="<?=
|
||||||
|
$this->href(
|
||||||
|
'monitoring/command/delaynotification',
|
||||||
|
$this->target
|
||||||
|
);
|
||||||
|
?>" class="button btn-cta btn-common btn-half-right">
|
||||||
|
Delay Notifications
|
||||||
</a>
|
</a>
|
||||||
<div>
|
|
||||||
{{REMOVE_COMMENTS_BUTTON}}
|
|
||||||
{{ADD_COMMENT_BUTTON}}
|
|
||||||
{{SEND_NOTIFICATION_BUTTON}}
|
|
||||||
{{DELAY_NOTIFICATION_BUTTON}}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
{{DOWNTIME_ICON}} Downtimes
|
Downtimes
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
|
<div class="panel-row">
|
||||||
|
<?php if (count($downtimes) > 0) { ?>
|
||||||
<a href="
|
<a href="
|
||||||
<?= $this->href(
|
<?= $this->href(
|
||||||
'monitoring/list/downtimes',
|
'monitoring/list/downtimes',
|
||||||
@ -11,10 +13,25 @@
|
|||||||
">
|
">
|
||||||
<?= count($downtimes); ?> Selected items are currently in downtime.
|
<?= count($downtimes); ?> Selected items are currently in downtime.
|
||||||
</a>
|
</a>
|
||||||
|
<a href="<?=
|
||||||
<div>
|
$this->href(
|
||||||
{{REMOVE_DOWNTIME_BUTTON}}
|
'monitoring/command/removedowntime',
|
||||||
{{REMOVE_ACKNOWLEDGEMENTS_BUTTON}}
|
$this->target
|
||||||
</div>
|
);
|
||||||
|
?>" class="button btn-common btn-small input-sm pull-right">
|
||||||
|
<i class="icinga-icon-remove"></i>
|
||||||
|
</a>
|
||||||
|
<?php } else { ?>
|
||||||
|
0 Selected items are currently in downtime.
|
||||||
|
<?php } ?>
|
||||||
|
</div>
|
||||||
|
<a href="<?=
|
||||||
|
$this->href(
|
||||||
|
'monitoring/command/removedowntime',
|
||||||
|
$target
|
||||||
|
);
|
||||||
|
?>" class="button btn-cta btn-common btn-wide">
|
||||||
|
Remove Acknowledgements
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,9 +1,67 @@
|
|||||||
|
<?php
|
||||||
|
/** @var Zend_View_Helper_CommandForm $cf */
|
||||||
|
$cf = $this->getHelper('CommandForm');
|
||||||
|
|
||||||
|
$servicequery = isset($this->servicequery) ? $this->servicequery : '';
|
||||||
|
?>
|
||||||
|
|
||||||
<h4> Selected <?= count($objects) ?> objects. </h4>
|
<h4> Selected <?= count($objects) ?> objects. </h4>
|
||||||
<a href="#">{{RECHECK_BUTTON}}</a>
|
|
||||||
<a href="#">{{RESCHEDULE_BUTTON}}</a>
|
<div class="panel-row">
|
||||||
<a href="#">{{ACKNOWLEDGE_PROBLEMS_BUTTON}}</a>
|
<a href="<?=
|
||||||
<a href="#">{{SCHEDULE_DOWNTIMES}}</a>
|
$this->href(
|
||||||
<a href="#">{{SUBMIT_PASSIVE_CHECK_RESULTS}}</a>
|
'monitoring/command/reschedulenextcheck',
|
||||||
|
$this->target
|
||||||
|
);
|
||||||
|
?>" class="button btn-cta btn-half-left">
|
||||||
|
Recheck
|
||||||
|
</a>
|
||||||
|
<a href="<?=
|
||||||
|
$this->href(
|
||||||
|
'monitoring/command/reschedulenextcheck',
|
||||||
|
$this->target
|
||||||
|
);
|
||||||
|
?>" class="button btn-cta btn-half-right">
|
||||||
|
Reschedule
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="panel-row">
|
||||||
|
<a href="<?=
|
||||||
|
$this->href(
|
||||||
|
'monitoring/command/acknowledgeproblem',
|
||||||
|
$this->target
|
||||||
|
);
|
||||||
|
?>" class="button btn-cta btn-wide">
|
||||||
|
Acknowledge Problems
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="panel-row">
|
||||||
|
|
||||||
|
<a href="<?=
|
||||||
|
$this->href(
|
||||||
|
'monitoring/command/scheduledowntimes',
|
||||||
|
$this->target
|
||||||
|
);
|
||||||
|
?>" class="button btn-cta btn-common btn-wide">
|
||||||
|
Schedule Downtimes
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="panel-row">
|
||||||
|
|
||||||
|
<a href="<?=
|
||||||
|
$this->href(
|
||||||
|
'monitoring/command/submitpassivecheckresult',
|
||||||
|
$this->target
|
||||||
|
);
|
||||||
|
?>" class="button btn-cta btn-common btn-wide">
|
||||||
|
Submit Passive Checkresults
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<ul class="list-inline">
|
<ul class="list-inline">
|
||||||
<?php
|
<?php
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
$this->is_service = false;
|
$this->is_service = false;
|
||||||
|
$this->hostquery = implode($this->hostnames, ',');
|
||||||
|
$this->target = array(
|
||||||
|
'host' => $this->hostquery
|
||||||
|
);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel panel-heading">
|
<div class="panel panel-heading">
|
||||||
{{HOST_ICON}}
|
|
||||||
<h1> Hosts </h1>
|
<h1> Hosts </h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -1,5 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
$this->is_service = true;
|
$this->is_service = true;
|
||||||
|
$this->hostquery = implode($this->hostnames, ',');
|
||||||
|
$this->servicequery = implode($this->servicenames, ',');
|
||||||
|
$this->target = array(
|
||||||
|
'host' => $this->hostquery,
|
||||||
|
'service' => $this->servicequery
|
||||||
|
);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
|
@ -77,7 +77,7 @@ function(Container, $, logger, Selectable, TableMultiSelection, URI) {
|
|||||||
var controlForms;
|
var controlForms;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles a multi-selection of rows
|
* Handles multi-selection
|
||||||
*
|
*
|
||||||
* @type {TableMultiSelection}
|
* @type {TableMultiSelection}
|
||||||
*/
|
*/
|
||||||
@ -135,6 +135,15 @@ function(Container, $, logger, Selectable, TableMultiSelection, URI) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show a 'hand' to indicate that the row is selectable,
|
||||||
|
* when hovering.
|
||||||
|
*/
|
||||||
|
this.showMousePointerOnRow = function(domContext) {
|
||||||
|
domContext = domContext || contentNode;
|
||||||
|
$('tbody tr', domContext).css('cursor' ,'pointer');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Activate a hover effect on all table rows, to indicate that
|
* Activate a hover effect on all table rows, to indicate that
|
||||||
* this table row is clickable.
|
* this table row is clickable.
|
||||||
@ -295,6 +304,27 @@ function(Container, $, logger, Selectable, TableMultiSelection, URI) {
|
|||||||
Container.getDetailContainer().registerOnUpdate(this.syncSelectionWithDetail.bind(this));
|
Container.getDetailContainer().registerOnUpdate(this.syncSelectionWithDetail.bind(this));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Init all objects responsible for selection handling
|
||||||
|
*
|
||||||
|
* - Indicate selection by showing active and hovered rows
|
||||||
|
* - Handle click-events according to the selection mode
|
||||||
|
* - Create and follow links according to the row content
|
||||||
|
*/
|
||||||
|
this.initRowSelection = function() {
|
||||||
|
selectionMode = gridDomNode.data('icinga-grid-selection-type');
|
||||||
|
if (selectionMode === 'multi' || selectionMode === 'single') {
|
||||||
|
// indicate selectable rows
|
||||||
|
this.showMousePointerOnRow();
|
||||||
|
this.activateRowHovering();
|
||||||
|
selection = new TableMultiSelection(
|
||||||
|
contentNode,
|
||||||
|
Container.getDetailContainer().getContainerHref()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
this.registerTableLinks();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create this component, setup listeners and behaviour
|
* Create this component, setup listeners and behaviour
|
||||||
*/
|
*/
|
||||||
@ -303,16 +333,8 @@ function(Container, $, logger, Selectable, TableMultiSelection, URI) {
|
|||||||
this.container.removeDefaultLoadIndicator();
|
this.container.removeDefaultLoadIndicator();
|
||||||
controlForms = determineControlForms();
|
controlForms = determineControlForms();
|
||||||
contentNode = determineContentTable();
|
contentNode = determineContentTable();
|
||||||
selectionMode = gridDomNode.data('icinga-grid-selection-type');
|
this.initRowSelection();
|
||||||
if (selectionMode === 'multi' || selectionMode === 'single') {
|
|
||||||
this.activateRowHovering();
|
|
||||||
selection = new TableMultiSelection(
|
|
||||||
contentNode,
|
|
||||||
Container.getDetailContainer().getContainerHref()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
this.registerControls();
|
this.registerControls();
|
||||||
this.registerTableLinks();
|
|
||||||
this.registerHistoryChanges();
|
this.registerHistoryChanges();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user