Merge branch 'bugfix/Take-display_name-into-account-when-searching-for-host-and-service-names-8241'

fixes #8241
This commit is contained in:
Eric Lippmann 2015-05-21 14:05:49 +02:00
commit 47f21eebaa
11 changed files with 308 additions and 181 deletions

View File

@ -10,6 +10,7 @@ use Icinga\Data\Filter\FilterOr;
use Icinga\Web\Url; use Icinga\Web\Url;
use Icinga\Application\Icinga; use Icinga\Application\Icinga;
use Icinga\Exception\ProgrammingError; use Icinga\Exception\ProgrammingError;
use Icinga\Web\Notification;
use Exception; use Exception;
/** /**
@ -215,31 +216,10 @@ class FilterEditor extends AbstractWidget
$filter = $this->getFilter(); $filter = $this->getFilter();
if ($search !== null) { if ($search !== null) {
if ($this->searchColumns === null) { if (empty($this->searchColumns)) {
if (strpos($search, '=') === false) { if (strpos($search, '=') === false) {
// TODO: Ask the view for (multiple) search columns Notification::error(mt('monitoring', 'Cannot search here'));
switch($request->getActionName()) { return $this;
case 'services':
$searchCol = 'service';
break;
case 'hosts':
$searchCol = 'host';
break;
case 'hostgroups':
$searchCol = 'hostgroup';
break;
case 'servicegroups':
$searchCol = 'servicegroup';
break;
default:
$searchCol = null;
}
if ($searchCol === null) {
throw new Exception('Cannot search here');
}
$search = ltrim($search);
$filter = $this->mergeRootExpression($filter, $searchCol, '=', "*$search*");
} else { } else {
list($k, $v) = preg_split('/=/', $search); list($k, $v) = preg_split('/=/', $search);
$filter = $this->mergeRootExpression($filter, trim($k), '=', ltrim($v)); $filter = $this->mergeRootExpression($filter, trim($k), '=', ltrim($v));

View File

@ -163,7 +163,7 @@ class Monitoring_ChartController extends Controller
public function hostgroupAction() public function hostgroupAction()
{ {
$query = $this->backend->select()->from( $query = $this->backend->select()->from(
'groupsummary', 'hostgroupsummary',
array( array(
'hostgroup', 'hostgroup',
'hosts_up', 'hosts_up',
@ -194,7 +194,7 @@ class Monitoring_ChartController extends Controller
public function servicegroupAction() public function servicegroupAction()
{ {
$query = $this->backend->select()->from( $query = $this->backend->select()->from(
'groupsummary', 'servicegroupsummary',
array( array(
'servicegroup', 'servicegroup',
'services_ok', 'services_ok',

View File

@ -12,6 +12,7 @@ use Icinga\Web\Widget\Tabs;
use Icinga\Data\Filter\Filter; use Icinga\Data\Filter\Filter;
use Icinga\Web\Widget; use Icinga\Web\Widget;
use Icinga\Module\Monitoring\Forms\StatehistoryForm; use Icinga\Module\Monitoring\Forms\StatehistoryForm;
use Icinga\Module\Monitoring\DataView\DataView;
class Monitoring_ListController extends Controller class Monitoring_ListController extends Controller
{ {
@ -468,35 +469,33 @@ class Monitoring_ListController extends Controller
); );
$this->setAutorefreshInterval(12); $this->setAutorefreshInterval(12);
$query = $this->backend->select()->from('groupsummary', array( $query = $this->backend->select()->from('servicegroupsummary', array(
'servicegroup_name',
'servicegroup_alias',
'hosts_up',
'hosts_unreachable_handled',
'hosts_unreachable_unhandled',
'hosts_down_handled', 'hosts_down_handled',
'hosts_down_unhandled', 'hosts_down_unhandled',
'hosts_pending', 'hosts_pending',
'services_ok', 'hosts_unreachable_handled',
'services_unknown_handled', 'hosts_unreachable_unhandled',
'services_unknown_unhandled', 'hosts_up',
'servicegroup_alias',
'servicegroup_name',
'services_critical_handled', 'services_critical_handled',
'services_critical_unhandled',
'services_warning_handled',
'services_warning_unhandled',
'services_pending',
'services_ok_last_state_change',
'services_pending_last_state_change',
'services_warning_last_state_change_handled',
'services_critical_last_state_change_handled', 'services_critical_last_state_change_handled',
'services_unknown_last_state_change_handled',
'services_warning_last_state_change_unhandled',
'services_critical_last_state_change_unhandled', 'services_critical_last_state_change_unhandled',
'services_critical_unhandled',
'services_ok',
'services_ok_last_state_change',
'services_pending',
'services_pending_last_state_change',
'services_total',
'services_unknown_handled',
'services_unknown_last_state_change_handled',
'services_unknown_last_state_change_unhandled', 'services_unknown_last_state_change_unhandled',
'services_total' 'services_unknown_unhandled',
))->order('services_severity')->order('servicegroup_alias'); 'services_warning_handled',
// TODO(el): Can't default to the sort rules of the data view because it's meant for both host groups and 'services_warning_last_state_change_handled',
// service groups. We should separate them. 'services_warning_last_state_change_unhandled',
'services_warning_unhandled'
));
$this->filterQuery($query); $this->filterQuery($query);
$this->view->servicegroups = $query; $this->view->servicegroups = $query;
@ -505,12 +504,7 @@ class Monitoring_ListController extends Controller
$this->setupSortControl(array( $this->setupSortControl(array(
'services_severity' => $this->translate('Severity'), 'services_severity' => $this->translate('Severity'),
'servicegroup_alias' => $this->translate('Service Group Name'), 'servicegroup_alias' => $this->translate('Service Group Name'),
'services_total' => $this->translate('Total Services'), 'services_total' => $this->translate('Total Services')
'services_ok' => $this->translate('Services OK'),
'services_unknown' => $this->translate('Services UNKNOWN'),
'services_critical' => $this->translate('Services CRITICAL'),
'services_warning' => $this->translate('Services WARNING'),
'services_pending' => $this->translate('Services PENDING')
), $query); ), $query);
} }
@ -519,56 +513,42 @@ class Monitoring_ListController extends Controller
$this->addTitleTab('hostgroups', $this->translate('Host Groups'), $this->translate('List host groups')); $this->addTitleTab('hostgroups', $this->translate('Host Groups'), $this->translate('List host groups'));
$this->setAutorefreshInterval(12); $this->setAutorefreshInterval(12);
$query = $this->backend->select()->from('groupsummary', array( $query = $this->backend->select()->from('hostgroupsummary', array(
'hostgroup_name',
'hostgroup_alias', 'hostgroup_alias',
'hosts_up', 'hostgroup_name',
'hosts_unreachable_handled',
'hosts_unreachable_unhandled',
'hosts_down_handled', 'hosts_down_handled',
'hosts_down_last_state_change_handled',
'hosts_down_last_state_change_unhandled',
'hosts_down_unhandled', 'hosts_down_unhandled',
'hosts_pending', 'hosts_pending',
'hosts_up_last_state_change',
'hosts_pending_last_state_change', 'hosts_pending_last_state_change',
'hosts_down_last_state_change_handled',
'hosts_unreachable_last_state_change_handled',
'hosts_down_last_state_change_unhandled',
'hosts_unreachable_last_state_change_unhandled',
'hosts_total', 'hosts_total',
'services_ok', 'hosts_unreachable_handled',
'services_unknown_handled', 'hosts_unreachable_last_state_change_handled',
'services_unknown_unhandled', 'hosts_unreachable_last_state_change_unhandled',
'hosts_unreachable_unhandled',
'hosts_up',
'hosts_up_last_state_change',
'services_critical_handled', 'services_critical_handled',
'services_critical_unhandled', 'services_critical_unhandled',
'services_warning_handled', 'services_ok',
'services_warning_unhandled',
'services_pending', 'services_pending',
'services_ok_last_state_change', 'services_total',
'services_pending_last_state_change', 'services_unknown_handled',
'services_warning_last_state_change_handled', 'services_unknown_unhandled',
'services_critical_last_state_change_handled', 'services_warning_handled',
'services_unknown_last_state_change_handled', 'services_warning_unhandled'
'services_warning_last_state_change_unhandled', ));
'services_critical_last_state_change_unhandled',
'services_unknown_last_state_change_unhandled',
'services_total'
))->order('services_severity')->order('hostgroup_alias');
// TODO(el): Can't default to the sort rules of the data view because it's meant for both host groups and
// service groups. We should separate them.
$this->filterQuery($query); $this->filterQuery($query);
$this->view->hostgroups = $query; $this->view->hostgroups = $query;
$this->setupLimitControl(); $this->setupLimitControl();
$this->setupPaginationControl($this->view->hostgroups); $this->setupPaginationControl($this->view->hostgroups);
$this->setupSortControl(array( $this->setupSortControl(array(
'services_severity' => $this->translate('Severity'), 'hosts_severity' => $this->translate('Severity'),
'hostgroup_alias' => $this->translate('Host Group Name'), 'hostgroup_alias' => $this->translate('Host Group Name'),
'services_total' => $this->translate('Total Services'), 'hosts_total' => $this->translate('Total Hosts'),
'services_ok' => $this->translate('Services OK'), 'services_total' => $this->translate('Total Services')
'services_unknown' => $this->translate('Services UNKNOWN'),
'services_critical' => $this->translate('Services CRITICAL'),
'services_warning' => $this->translate('Services WARNING'),
'services_pending' => $this->translate('Services PENDING')
), $query); ), $query);
} }
@ -626,23 +606,31 @@ class Monitoring_ListController extends Controller
$this->view->verticalPaginator = $pivot->paginateYAxis(); $this->view->verticalPaginator = $pivot->paginateYAxis();
} }
protected function filterQuery($query) /**
* Apply filters on a DataView
*
* @param DataView $dataView The DataView to apply filters on
*
* @return DataView $dataView
*/
protected function filterQuery(DataView $dataView)
{ {
$editor = Widget::create('filterEditor') $editor = Widget::create('filterEditor')
->setQuery($query) ->setQuery($dataView)
->preserveParams( ->preserveParams(
'limit', 'sort', 'dir', 'format', 'view', 'backend', 'limit', 'sort', 'dir', 'format', 'view', 'backend',
'stateType', 'addColumns', '_dev' 'stateType', 'addColumns', '_dev'
) )
->ignoreParams('page') ->ignoreParams('page')
->setSearchColumns($dataView->getSearchColumns())
->handleRequest($this->getRequest()); ->handleRequest($this->getRequest());
$query->applyFilter($editor->getFilter()); $dataView->applyFilter($editor->getFilter());
$this->setupFilterControl($editor); $this->setupFilterControl($editor);
$this->view->filter = $editor->getFilter(); $this->view->filter = $editor->getFilter();
$this->handleFormatRequest($query); $this->handleFormatRequest($dataView);
return $query; return $dataView;
} }
/** /**

View File

@ -5,59 +5,72 @@ namespace Icinga\Module\Monitoring\Backend\Ido\Query;
use Zend_Db_Select; use Zend_Db_Select;
/**
* Query for host and service group summaries
*/
class GroupSummaryQuery extends IdoQuery class GroupSummaryQuery extends IdoQuery
{ {
protected $useSubqueryCount = true; /**
* {@inheritdoc}
*/
protected $columnMap = array( protected $columnMap = array(
'hoststatussummary' => array( 'hoststatussummary' => array(
'hosts_total' => 'SUM(CASE WHEN object_type = \'host\' THEN 1 ELSE 0 END)', 'hostgroup' => 'hostgroup COLLATE latin1_general_ci',
'hostgroup_alias' => 'hostgroup_alias COLLATE latin1_general_ci',
'hostgroup_name' => 'hostgroup_name',
'hosts_up' => 'SUM(CASE WHEN object_type = \'host\' AND state = 0 THEN 1 ELSE 0 END)', 'hosts_up' => 'SUM(CASE WHEN object_type = \'host\' AND state = 0 THEN 1 ELSE 0 END)',
'hosts_unreachable' => 'SUM(CASE WHEN object_type = \'host\' AND state = 2 THEN 1 ELSE 0 END)', 'hosts_unreachable' => 'SUM(CASE WHEN object_type = \'host\' AND state = 2 THEN 1 ELSE 0 END)',
'hosts_unreachable_handled' => 'SUM(CASE WHEN object_type = \'host\' AND state = 2 AND acknowledged + in_downtime != 0 THEN 1 ELSE 0 END)', 'hosts_unreachable_handled' => 'SUM(CASE WHEN object_type = \'host\' AND state = 2 AND acknowledged + in_downtime != 0 THEN 1 ELSE 0 END)',
'hosts_unreachable_unhandled' => 'SUM(CASE WHEN object_type = \'host\' AND state = 2 AND acknowledged + in_downtime = 0 THEN 1 ELSE 0 END)', 'hosts_unreachable_unhandled' => 'SUM(CASE WHEN object_type = \'host\' AND state = 2 AND acknowledged + in_downtime = 0 THEN 1 ELSE 0 END)',
'hosts_down' => 'SUM(CASE WHEN object_type = \'host\' AND state = 1 THEN 1 ELSE 0 END)', 'hosts_down' => 'SUM(CASE WHEN object_type = \'host\' AND state = 1 THEN 1 ELSE 0 END)',
'hosts_down_handled' => 'SUM(CASE WHEN object_type = \'host\' AND state = 1 AND acknowledged + in_downtime != 0 THEN 1 ELSE 0 END)', 'hosts_down_handled' => 'SUM(CASE WHEN object_type = \'host\' AND state = 1 AND acknowledged + in_downtime != 0 THEN 1 ELSE 0 END)',
'hosts_down_last_state_change_handled' => 'MAX(CASE WHEN object_type = \'host\' AND state = 1 AND acknowledged + in_downtime != 0 THEN state_change ELSE 0 END)',
'hosts_down_last_state_change_unhandled' => 'MAX(CASE WHEN object_type = \'host\' AND state = 1 AND acknowledged + in_downtime = 0 THEN state_change ELSE 0 END)',
'hosts_down_unhandled' => 'SUM(CASE WHEN object_type = \'host\' AND state = 1 AND acknowledged + in_downtime = 0 THEN 1 ELSE 0 END)', 'hosts_down_unhandled' => 'SUM(CASE WHEN object_type = \'host\' AND state = 1 AND acknowledged + in_downtime = 0 THEN 1 ELSE 0 END)',
'hosts_pending' => 'SUM(CASE WHEN object_type = \'host\' AND state = 99 THEN 1 ELSE 0 END)', 'hosts_pending' => 'SUM(CASE WHEN object_type = \'host\' AND state = 99 THEN 1 ELSE 0 END)',
'hosts_up_last_state_change' => 'MAX(CASE WHEN object_type = \'host\' AND state = 0 THEN state_change ELSE 0 END)',
'hosts_pending_last_state_change' => 'MAX(CASE WHEN object_type = \'host\' AND state = 99 THEN state_change ELSE 0 END)', 'hosts_pending_last_state_change' => 'MAX(CASE WHEN object_type = \'host\' AND state = 99 THEN state_change ELSE 0 END)',
'hosts_down_last_state_change_handled' => 'MAX(CASE WHEN object_type = \'host\' AND state = 1 AND acknowledged + in_downtime != 0 THEN state_change ELSE 0 END)', 'hosts_severity' => 'MAX(CASE WHEN object_type = \'host\' THEN severity ELSE 0 END)',
'hosts_total' => 'SUM(CASE WHEN object_type = \'host\' THEN 1 ELSE 0 END)',
'hosts_unreachable_last_state_change_handled' => 'MAX(CASE WHEN object_type = \'host\' AND state = 2 AND acknowledged + in_downtime != 0 THEN state_change ELSE 0 END)', 'hosts_unreachable_last_state_change_handled' => 'MAX(CASE WHEN object_type = \'host\' AND state = 2 AND acknowledged + in_downtime != 0 THEN state_change ELSE 0 END)',
'hosts_down_last_state_change_unhandled' => 'MAX(CASE WHEN object_type = \'host\' AND state = 1 AND acknowledged + in_downtime = 0 THEN state_change ELSE 0 END)',
'hosts_unreachable_last_state_change_unhandled' => 'MAX(CASE WHEN object_type = \'host\' AND state = 2 AND acknowledged + in_downtime = 0 THEN state_change ELSE 0 END)', 'hosts_unreachable_last_state_change_unhandled' => 'MAX(CASE WHEN object_type = \'host\' AND state = 2 AND acknowledged + in_downtime = 0 THEN state_change ELSE 0 END)',
'hostgroup_name' => 'hostgroup_name', 'hosts_up_last_state_change' => 'MAX(CASE WHEN object_type = \'host\' AND state = 0 THEN state_change ELSE 0 END)'
'hostgroup_alias' => 'hostgroup_alias',
'hostgroup' => 'hostgroup'
), ),
'servicestatussummary' => array( 'servicestatussummary' => array(
'services_total' => 'SUM(CASE WHEN object_type = \'service\' THEN 1 ELSE 0 END)', 'servicegroup' => 'servicegroup COLLATE latin1_general_ci',
'services_ok' => 'SUM(CASE WHEN object_type = \'service\' AND state = 0 THEN 1 ELSE 0 END)', 'servicegroup_alias' => 'servicegroup_alias COLLATE latin1_general_ci',
'services_pending' => 'SUM(CASE WHEN object_type = \'service\' AND state = 99 THEN 1 ELSE 0 END)', 'servicegroup_name' => 'servicegroup_name',
'services_warning' => 'SUM(CASE WHEN object_type = \'service\' AND state = 1 THEN 1 ELSE 0 END)',
'services_warning_handled' => 'SUM(CASE WHEN object_type = \'service\' AND state = 1 AND acknowledged + in_downtime + host_state > 0 THEN 1 ELSE 0 END)',
'services_critical' => 'SUM(CASE WHEN object_type = \'service\' AND state = 2 THEN 1 ELSE 0 END)', 'services_critical' => 'SUM(CASE WHEN object_type = \'service\' AND state = 2 THEN 1 ELSE 0 END)',
'services_critical_handled' => 'SUM(CASE WHEN object_type = \'service\' AND state = 2 AND acknowledged + in_downtime + host_state > 0 THEN 1 ELSE 0 END)', 'services_critical_handled' => 'SUM(CASE WHEN object_type = \'service\' AND state = 2 AND acknowledged + in_downtime + host_state > 0 THEN 1 ELSE 0 END)',
'services_critical_last_state_change_handled' => 'MAX(CASE WHEN object_type = \'service\' AND state = 2 AND acknowledged + in_downtime + host_state > 0 THEN state_change ELSE 0 END)',
'services_critical_last_state_change_unhandled' => 'MAX(CASE WHEN object_type = \'service\' AND state = 2 AND acknowledged + in_downtime + host_state = 0 THEN state_change ELSE 0 END)',
'services_critical_unhandled' => 'SUM(CASE WHEN object_type = \'service\' AND state = 2 AND acknowledged + in_downtime + host_state = 0 THEN 1 ELSE 0 END)',
'services_ok' => 'SUM(CASE WHEN object_type = \'service\' AND state = 0 THEN 1 ELSE 0 END)',
'services_ok_last_state_change' => 'MAX(CASE WHEN object_type = \'service\' AND state = 0 THEN state_change ELSE 0 END)',
'services_pending' => 'SUM(CASE WHEN object_type = \'service\' AND state = 99 THEN 1 ELSE 0 END)',
'services_pending_last_state_change' => 'MAX(CASE WHEN object_type = \'service\' AND state = 99 THEN state_change ELSE 0 END)',
'services_severity' => 'MAX(CASE WHEN object_type = \'service\' THEN severity ELSE 0 END)',
'services_total' => 'SUM(CASE WHEN object_type = \'service\' THEN 1 ELSE 0 END)',
'services_unknown' => 'SUM(CASE WHEN object_type = \'service\' AND state = 3 THEN 1 ELSE 0 END)', 'services_unknown' => 'SUM(CASE WHEN object_type = \'service\' AND state = 3 THEN 1 ELSE 0 END)',
'services_unknown_handled' => 'SUM(CASE WHEN object_type = \'service\' AND state = 3 AND acknowledged + in_downtime + host_state > 0 THEN 1 ELSE 0 END)', 'services_unknown_handled' => 'SUM(CASE WHEN object_type = \'service\' AND state = 3 AND acknowledged + in_downtime + host_state > 0 THEN 1 ELSE 0 END)',
'services_warning_unhandled' => 'SUM(CASE WHEN object_type = \'service\' AND state = 1 AND acknowledged + in_downtime + host_state = 0 THEN 1 ELSE 0 END)',
'services_critical_unhandled' => 'SUM(CASE WHEN object_type = \'service\' AND state = 2 AND acknowledged + in_downtime + host_state = 0 THEN 1 ELSE 0 END)',
'services_unknown_unhandled' => 'SUM(CASE WHEN object_type = \'service\' AND state = 3 AND acknowledged + in_downtime + host_state = 0 THEN 1 ELSE 0 END)',
'services_severity' => 'MAX(CASE WHEN object_type = \'service\' THEN severity ELSE 0 END)',
'services_ok_last_state_change' => 'MAX(CASE WHEN object_type = \'service\' AND state = 0 THEN state_change ELSE 0 END)',
'services_pending_last_state_change' => 'MAX(CASE WHEN object_type = \'service\' AND state = 99 THEN state_change ELSE 0 END)',
'services_warning_last_state_change_handled' => 'MAX(CASE WHEN object_type = \'service\' AND state = 1 AND acknowledged + in_downtime + host_state > 0 THEN state_change ELSE 0 END)',
'services_critical_last_state_change_handled' => 'MAX(CASE WHEN object_type = \'service\' AND state = 2 AND acknowledged + in_downtime + host_state > 0 THEN state_change ELSE 0 END)',
'services_unknown_last_state_change_handled' => 'MAX(CASE WHEN object_type = \'service\' AND state = 3 AND acknowledged + in_downtime + host_state > 0 THEN state_change ELSE 0 END)', 'services_unknown_last_state_change_handled' => 'MAX(CASE WHEN object_type = \'service\' AND state = 3 AND acknowledged + in_downtime + host_state > 0 THEN state_change ELSE 0 END)',
'services_warning_last_state_change_unhandled' => 'MAX(CASE WHEN object_type = \'service\' AND state = 1 AND acknowledged + in_downtime + host_state = 0 THEN state_change ELSE 0 END)',
'services_critical_last_state_change_unhandled' => 'MAX(CASE WHEN object_type = \'service\' AND state = 2 AND acknowledged + in_downtime + host_state = 0 THEN state_change ELSE 0 END)',
'services_unknown_last_state_change_unhandled' => 'MAX(CASE WHEN object_type = \'service\' AND state = 3 AND acknowledged + in_downtime + host_state = 0 THEN state_change ELSE 0 END)', 'services_unknown_last_state_change_unhandled' => 'MAX(CASE WHEN object_type = \'service\' AND state = 3 AND acknowledged + in_downtime + host_state = 0 THEN state_change ELSE 0 END)',
'servicegroup_name' => 'servicegroup_name', 'services_unknown_unhandled' => 'SUM(CASE WHEN object_type = \'service\' AND state = 3 AND acknowledged + in_downtime + host_state = 0 THEN 1 ELSE 0 END)',
'servicegroup_alias' => 'servicegroup_alias', 'services_warning' => 'SUM(CASE WHEN object_type = \'service\' AND state = 1 THEN 1 ELSE 0 END)',
'servicegroup' => 'servicegroup' 'services_warning_handled' => 'SUM(CASE WHEN object_type = \'service\' AND state = 1 AND acknowledged + in_downtime + host_state > 0 THEN 1 ELSE 0 END)',
'services_warning_last_state_change_handled' => 'MAX(CASE WHEN object_type = \'service\' AND state = 1 AND acknowledged + in_downtime + host_state > 0 THEN state_change ELSE 0 END)',
'services_warning_last_state_change_unhandled' => 'MAX(CASE WHEN object_type = \'service\' AND state = 1 AND acknowledged + in_downtime + host_state = 0 THEN state_change ELSE 0 END)',
'services_warning_unhandled' => 'SUM(CASE WHEN object_type = \'service\' AND state = 1 AND acknowledged + in_downtime + host_state = 0 THEN 1 ELSE 0 END)'
) )
); );
/**
* {@inheritdoc}
*/
protected $useSubqueryCount = true;
/**
* {@inheritdoc}
*/
protected function joinBaseTables() protected function joinBaseTables()
{ {
$columns = array( $columns = array(
@ -79,11 +92,11 @@ class GroupSummaryQuery extends IdoQuery
$hosts = $this->createSubQuery( $hosts = $this->createSubQuery(
'Hoststatus', 'Hoststatus',
$columns + array( $columns + array(
'state' => 'host_state', 'state' => 'host_state',
'acknowledged' => 'host_acknowledged', 'acknowledged' => 'host_acknowledged',
'in_downtime' => 'host_in_downtime', 'in_downtime' => 'host_in_downtime',
'state_change' => 'host_last_state_change', 'state_change' => 'host_last_state_change',
'severity' => 'host_severity' 'severity' => 'host_severity'
) )
); );
if (in_array('servicegroup_name', $this->desiredColumns)) { if (in_array('servicegroup_name', $this->desiredColumns)) {
@ -101,11 +114,11 @@ class GroupSummaryQuery extends IdoQuery
$services = $this->createSubQuery( $services = $this->createSubQuery(
'Status', 'Status',
$columns + array( $columns + array(
'state' => 'service_state', 'state' => 'service_state',
'acknowledged' => 'service_acknowledged', 'acknowledged' => 'service_acknowledged',
'in_downtime' => 'service_in_downtime', 'in_downtime' => 'service_in_downtime',
'state_change' => 'service_last_state_change', 'state_change' => 'service_last_state_change',
'severity' => 'service_severity' 'severity' => 'service_severity'
) )
); );
$union = $this->db->select()->union(array($hosts, $services), Zend_Db_Select::SQL_UNION_ALL); $union = $this->db->select()->union(array($hosts, $services), Zend_Db_Select::SQL_UNION_ALL);

View File

@ -11,7 +11,7 @@ class HoststatusQuery extends IdoQuery
'hosts' => array( 'hosts' => array(
'host' => 'ho.name1 COLLATE latin1_general_ci', 'host' => 'ho.name1 COLLATE latin1_general_ci',
'host_name' => 'ho.name1 COLLATE latin1_general_ci', 'host_name' => 'ho.name1 COLLATE latin1_general_ci',
'host_display_name' => 'h.display_name', 'host_display_name' => 'h.display_name COLLATE latin1_general_ci',
'host_alias' => 'h.alias', 'host_alias' => 'h.alias',
'host_address' => 'h.address', 'host_address' => 'h.address',
'host_ipv4' => 'INET_ATON(h.address)', 'host_ipv4' => 'INET_ATON(h.address)',
@ -85,7 +85,7 @@ class HoststatusQuery extends IdoQuery
'hostgroups' => array( 'hostgroups' => array(
'hostgroup' => 'hgo.name1 COLLATE latin1_general_ci', 'hostgroup' => 'hgo.name1 COLLATE latin1_general_ci',
'hostgroup_name' => 'hgo.name1', 'hostgroup_name' => 'hgo.name1',
'hostgroup_alias' => 'hg.alias' 'hostgroup_alias' => 'hg.alias COLLATE latin1_general_ci'
), ),
'servicegroups' => array( 'servicegroups' => array(
'servicegroup' => 'sgo.name1 COLLATE latin1_general_ci', 'servicegroup' => 'sgo.name1 COLLATE latin1_general_ci',

View File

@ -36,7 +36,7 @@ class StatusQuery extends IdoQuery
'hosts' => array( 'hosts' => array(
'host' => 'ho.name1 COLLATE latin1_general_ci', 'host' => 'ho.name1 COLLATE latin1_general_ci',
'host_name' => 'ho.name1', 'host_name' => 'ho.name1',
'host_display_name' => 'h.display_name', 'host_display_name' => 'h.display_name COLLATE latin1_general_ci',
'host_alias' => 'h.alias', 'host_alias' => 'h.alias',
'host_address' => 'h.address', 'host_address' => 'h.address',
'host_ipv4' => 'INET_ATON(h.address)', 'host_ipv4' => 'INET_ATON(h.address)',
@ -162,19 +162,19 @@ class StatusQuery extends IdoQuery
'hostgroups' => array( 'hostgroups' => array(
'hostgroup' => 'hgo.name1 COLLATE latin1_general_ci', 'hostgroup' => 'hgo.name1 COLLATE latin1_general_ci',
'hostgroup_name' => 'hgo.name1', 'hostgroup_name' => 'hgo.name1',
'hostgroup_alias' => 'hg.alias' 'hostgroup_alias' => 'hg.alias COLLATE latin1_general_ci'
), ),
'servicegroups' => array( 'servicegroups' => array(
'servicegroup' => 'sgo.name1 COLLATE latin1_general_ci', 'servicegroup' => 'sgo.name1 COLLATE latin1_general_ci',
'servicegroup_name' => 'sgo.name1', 'servicegroup_name' => 'sgo.name1',
'servicegroup_alias' => 'sg.alias' 'servicegroup_alias' => 'sg.alias COLLATE latin1_general_ci'
), ),
'services' => array( 'services' => array(
'service_host' => 'so.name1 COLLATE latin1_general_ci', 'service_host' => 'so.name1 COLLATE latin1_general_ci',
'service_host_name' => 'so.name1', 'service_host_name' => 'so.name1',
'service' => 'so.name2 COLLATE latin1_general_ci', 'service' => 'so.name2 COLLATE latin1_general_ci',
'service_description' => 'so.name2', 'service_description' => 'so.name2',
'service_display_name' => 's.display_name', 'service_display_name' => 's.display_name COLLATE latin1_general_ci',
'service_icon_image' => 's.icon_image', 'service_icon_image' => 's.icon_image',
'service_action_url' => 's.action_url', 'service_action_url' => 's.action_url',
'service_notes_url' => 's.notes_url', 'service_notes_url' => 's.notes_url',

View File

@ -375,6 +375,16 @@ abstract class DataView implements QueryInterface, IteratorAggregate
return $this; return $this;
} }
/**
* Get the view's search columns
*
* @return string[]
*/
public function getSearchColumns()
{
return array();
}
/** /**
* @deprecated(EL): Only use DataView::applyFilter() for applying filter because all other functions are missing * @deprecated(EL): Only use DataView::applyFilter() for applying filter because all other functions are missing
* column validation. * column validation.

View File

@ -126,4 +126,12 @@ class HostStatus extends DataView
} }
return parent::isValidFilterTarget($column); return parent::isValidFilterTarget($column);
} }
/**
* {@inheritdoc}
*/
public function getSearchColumns()
{
return array('host', 'host_display_name');
}
} }

View File

@ -0,0 +1,101 @@
<?php
/* Icinga Web 2 | (c) 2013-2015 Icinga Development Team | GPLv2+ */
namespace Icinga\Module\Monitoring\DataView;
/**
* Data view for the host group summary
*/
class Hostgroupsummary extends DataView
{
/**
* {@inheritdoc}
*/
public function getColumns()
{
return array(
'hostgroup_alias',
'hostgroup_name',
'hosts_down_handled',
'hosts_down_last_state_change_handled',
'hosts_down_last_state_change_unhandled',
'hosts_down_unhandled',
'hosts_pending',
'hosts_pending_last_state_change',
'hosts_severity',
'hosts_total',
'hosts_unreachable_handled',
'hosts_unreachable_last_state_change_handled',
'hosts_unreachable_last_state_change_unhandled',
'hosts_unreachable_unhandled',
'hosts_up',
'hosts_up_last_state_change',
'services_critical_handled',
'services_critical_unhandled',
'services_ok',
'services_pending',
'services_total',
'services_unknown_handled',
'services_unknown_unhandled',
'services_warning_handled',
'services_warning_unhandled'
);
}
/**
* {@inheritdoc}
*/
public function getFilterColumns()
{
return array('hostgroup');
}
/**
* {@inheritdoc}
*/
public static function getQueryName()
{
return 'groupsummary';
}
/**
* {@inheritdoc}
*/
public function getSearchColumns()
{
return array('hostgroup', 'hostgroup_alias');
}
/**
* {@inheritdoc}
*/
public function getSortRules()
{
return array(
'hostgroup_alias' => array(
'order' => self::SORT_ASC
),
'hosts_severity' => array(
'columns' => array(
'hosts_severity',
'hostgroup_alias ASC'
),
'order' => self::SORT_DESC
),
'hosts_total' => array(
'columns' => array(
'hosts_total',
'hostgroup_alias ASC'
),
'order' => self::SORT_ASC
),
'services_total' => array(
'columns' => array(
'services_total',
'hostgroup_alias ASC'
),
'order' => self::SORT_ASC
)
);
}
}

View File

@ -185,4 +185,12 @@ class ServiceStatus extends DataView
} }
return parent::isValidFilterTarget($column); return parent::isValidFilterTarget($column);
} }
/**
* {@inheritdoc}
*/
public function getSearchColumns()
{
return array('service', 'service_display_name');
}
} }

View File

@ -3,71 +3,90 @@
namespace Icinga\Module\Monitoring\DataView; namespace Icinga\Module\Monitoring\DataView;
class Groupsummary extends DataView class Servicegroupsummary extends DataView
{ {
/** /**
* Retrieve columns provided by this view * {@inheritdoc}
*
* @return array
*/ */
public function getColumns() public function getColumns()
{ {
return array( return array(
'servicegroup_name',
'servicegroup_alias',
'hostgroup_name',
'hostgroup_alias',
'hosts_total',
'hosts_up',
'hosts_unreachable',
'hosts_unreachable_handled',
'hosts_unreachable_unhandled',
'hosts_down',
'hosts_down_handled', 'hosts_down_handled',
'hosts_down_unhandled', 'hosts_down_unhandled',
'hosts_pending', 'hosts_pending',
'hosts_up_last_state_change', 'hosts_unreachable_handled',
'hosts_pending_last_state_change', 'hosts_unreachable_unhandled',
'hosts_down_last_state_change_handled', 'hosts_up',
'hosts_unreachable_last_state_change_handled', 'servicegroup_alias',
'hosts_down_last_state_change_unhandled', 'servicegroup_name',
'hosts_unreachable_last_state_change_unhandled',
'services_total',
'services_ok',
'services_unknown',
'services_unknown_handled',
'services_unknown_unhandled',
'services_critical',
'services_critical_handled', 'services_critical_handled',
'services_critical_unhandled',
'services_warning',
'services_warning_handled',
'services_warning_unhandled',
'services_pending',
'services_severity',
'services_ok_last_state_change',
'services_pending_last_state_change',
'services_warning_last_state_change_handled',
'services_critical_last_state_change_handled', 'services_critical_last_state_change_handled',
'services_unknown_last_state_change_handled',
'services_warning_last_state_change_unhandled',
'services_critical_last_state_change_unhandled', 'services_critical_last_state_change_unhandled',
'services_unknown_last_state_change_unhandled' 'services_critical_unhandled',
'services_ok',
'services_ok_last_state_change',
'services_pending',
'services_pending_last_state_change',
'services_severity',
'services_total',
'services_unknown_handled',
'services_unknown_last_state_change_handled',
'services_unknown_last_state_change_unhandled',
'services_unknown_unhandled',
'services_warning_handled',
'services_warning_last_state_change_handled',
'services_warning_last_state_change_unhandled',
'services_warning_unhandled'
); );
} }
/**
* {@inheritdoc}
*/
public function getFilterColumns()
{
return array('servicegroup');
}
/**
* {@inheritdoc}
*/
public static function getQueryName()
{
return 'groupsummary';
}
/**
* {@inheritdoc}
*/
public function getSearchColumns()
{
return array('servicegroup', 'servicegroup_alias');
}
/**
* {@inheritdoc}
*/
public function getSortRules() public function getSortRules()
{ {
return array( return array(
'servicegroup_alias' => array(
'order' => self::SORT_ASC
),
'services_severity' => array( 'services_severity' => array(
'columns' => array('services_severity'), 'columns' => array(
'order' => self::SORT_DESC 'services_severity',
'servicegroup_alias ASC'
),
'order' => self::SORT_DESC
),
'services_total' => array(
'columns' => array(
'services_total',
'servicegroup_alias ASC'
),
'order' => self::SORT_ASC
) )
); );
} }
public function getFilterColumns()
{
return array('hostgroup', 'servicegroup');
}
} }