monitoring/list/hosts: Don't show unhandled service counts
It has too much problems. It wasn't even visible since the initial release, at least not if there were many results. It being visible was more a case of chance than guarantee. We now also identified a major issue with restrictions and the way we can assemble queries here. In short, there are too much technical difficulties that we deemed it not worthwhile to keep.
This commit is contained in:
parent
2e9a94144f
commit
796742f03d
|
@ -109,12 +109,8 @@ class ListController extends Controller
|
|||
));
|
||||
$this->applyRestriction('monitoring/filter/objects', $stats);
|
||||
|
||||
$summary = $hosts->getQuery()->queryServiceProblemSummary();
|
||||
$this->applyRestriction('monitoring/filter/objects', $summary);
|
||||
|
||||
$this->view->hosts = $hosts;
|
||||
$this->view->stats = $stats;
|
||||
$this->view->summary = $summary->fetchPairs();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -60,33 +60,6 @@ if (! $this->compact): ?>
|
|||
'class' => 'rowaction'
|
||||
)
|
||||
) ?>
|
||||
<?php if (isset($summary[$host->host_name])): ?>
|
||||
<span class="host-services-incidents"> (<?= $this->qlink(
|
||||
sprintf(
|
||||
$this->translatePlural(
|
||||
'%u unhandled service', '%u unhandled services', $summary[$host->host_name]
|
||||
),
|
||||
$summary[$host->host_name]
|
||||
),
|
||||
'monitoring/list/services',
|
||||
array(
|
||||
'host' => $host->host_name,
|
||||
'service_problem' => 1,
|
||||
'service_handled' => 0
|
||||
),
|
||||
array(
|
||||
'title' => sprintf(
|
||||
$this->translatePlural(
|
||||
'List %s unhandled service problem on host %s',
|
||||
'List %s unhandled service problems on host %s',
|
||||
$summary[$host->host_name]
|
||||
),
|
||||
$summary[$host->host_name],
|
||||
$host->host_name
|
||||
)
|
||||
)
|
||||
) ?>)</span>
|
||||
<?php endif ?>
|
||||
<span class="state-icons"><?= $this->hostFlags($host) ?></span>
|
||||
</div>
|
||||
<p class="overview-plugin-output"><?= $this->pluginOutput($this->ellipsis($host->host_output, 10000), true, $host->host_check_command) ?></p>
|
||||
|
|
|
@ -1,172 +0,0 @@
|
|||
<?php
|
||||
/* Icinga Web 2 | (c) 2015 Icinga Development Team | GPLv2+ */
|
||||
|
||||
namespace Icinga\Module\Monitoring\Backend\Ido\Query;
|
||||
|
||||
class HostserviceproblemsummaryQuery extends IdoQuery
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected $allowCustomVars = true;
|
||||
|
||||
/**
|
||||
* The HoststatusQuery in use
|
||||
*
|
||||
* @var HoststatusQuery
|
||||
*/
|
||||
protected $hostStatusQuery;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected $columnMap = array(
|
||||
'instances' => array(
|
||||
'instance_name' => 'i.instance_name'
|
||||
),
|
||||
'services' => array(
|
||||
'host_name' => 'so.name1',
|
||||
'service_description' => 'so.name2'
|
||||
),
|
||||
'hostgroups' => array(
|
||||
'hostgroup_name' => 'hgo.name1'
|
||||
),
|
||||
'servicegroups' => array(
|
||||
'servicegroup_name' => 'sgo.name1'
|
||||
),
|
||||
'problemsummary' => array(
|
||||
'unhandled_service_count' => 'SUM(
|
||||
CASE
|
||||
WHEN (ss.problem_has_been_acknowledged + ss.scheduled_downtime_depth + COALESCE(hs.current_state, 0)) > 0
|
||||
THEN 0
|
||||
ELSE 1
|
||||
END
|
||||
)'
|
||||
)
|
||||
);
|
||||
|
||||
/**
|
||||
* Set the HoststatusQuery to use
|
||||
*
|
||||
* @param HoststatusQuery $query
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setHoststatusQuery(HoststatusQuery $query)
|
||||
{
|
||||
$this->hostStatusQuery = clone $query;
|
||||
$this->hostStatusQuery
|
||||
->setIsSubQuery()
|
||||
->columns(array('object_id'));
|
||||
if ($this->hostStatusQuery->hasOrder()) {
|
||||
/*
|
||||
* This works like this:
|
||||
* 1. Get automatic group by definitions
|
||||
* 2. Append the order by columns to them
|
||||
* 3. Pass the entire result back to the query
|
||||
* 4. Rely on the fact that `array_unique` (which is eventually used by IdoQuery::getGroup())
|
||||
* keeps the first items and removes subsequent ones so that the automatic group columns
|
||||
* are still first in the definition (mind blown?)
|
||||
*/
|
||||
$groupBy = $this->hostStatusQuery->getGroup();
|
||||
foreach ($this->hostStatusQuery->getOrder() as list($column, $_)) {
|
||||
$groupBy[] = $column;
|
||||
}
|
||||
|
||||
$this->hostStatusQuery->group($groupBy);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function joinBaseTables()
|
||||
{
|
||||
$this->select->from(
|
||||
array('so' => $this->prefix . 'objects'),
|
||||
array()
|
||||
)->join(
|
||||
array('s' => $this->prefix . 'services'),
|
||||
's.service_object_id = so.object_id AND so.is_active = 1',
|
||||
array()
|
||||
);
|
||||
$this->select->group('so.name1');
|
||||
$this->joinedVirtualTables['services'] = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Join instances
|
||||
*/
|
||||
protected function joinInstances()
|
||||
{
|
||||
$this->select->join(
|
||||
array('i' => $this->prefix . 'instances'),
|
||||
'i.instance_id = so.instance_id',
|
||||
array()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Join host groups
|
||||
*/
|
||||
protected function joinHostgroups()
|
||||
{
|
||||
$this->select->joinLeft(
|
||||
array('hgm' => $this->prefix . 'hostgroup_members'),
|
||||
'hgm.host_object_id = s.host_object_id',
|
||||
array()
|
||||
)->joinLeft(
|
||||
array('hg' => $this->prefix . 'hostgroups'),
|
||||
'hg.hostgroup_id = hgm.hostgroup_id',
|
||||
array()
|
||||
)->joinLeft(
|
||||
array('hgo' => $this->prefix . 'objects'),
|
||||
'hgo.object_id = hg.hostgroup_object_id AND hgo.is_active = 1 AND hgo.objecttype_id = 3',
|
||||
array()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Join service groups
|
||||
*/
|
||||
protected function joinServicegroups()
|
||||
{
|
||||
$this->select->joinLeft(
|
||||
array('sgm' => $this->prefix . 'servicegroup_members'),
|
||||
'sgm.service_object_id = so.object_id',
|
||||
array()
|
||||
)->joinLeft(
|
||||
array('sg' => $this->prefix . 'servicegroups'),
|
||||
'sgm.servicegroup_id = sg.servicegroup_id',
|
||||
array()
|
||||
)->joinLeft(
|
||||
array('sgo' => $this->prefix . 'objects'),
|
||||
'sgo.object_id = sg.servicegroup_object_id AND sgo.is_active = 1 AND sgo.objecttype_id = 4',
|
||||
array()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Join the statussummary
|
||||
*/
|
||||
protected function joinProblemsummary()
|
||||
{
|
||||
$this->select->join(
|
||||
array('ss' => $this->prefix . 'servicestatus'),
|
||||
'ss.service_object_id = so.object_id AND ss.current_state > 0',
|
||||
array()
|
||||
)->join(
|
||||
array('hs' => $this->prefix . 'hoststatus'),
|
||||
'hs.host_object_id = s.host_object_id',
|
||||
array()
|
||||
)->join(
|
||||
array('h' => $this->hostStatusQuery),
|
||||
'h.object_id = s.host_object_id',
|
||||
array()
|
||||
);
|
||||
|
||||
$this->select->having($this->getMappedField('unhandled_service_count') . ' > 0');
|
||||
}
|
||||
}
|
|
@ -321,21 +321,6 @@ class HoststatusQuery extends IdoQuery
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Query the service problem summary for all hosts of this query's result set
|
||||
*
|
||||
* @return HostserviceproblemsummaryQuery
|
||||
*/
|
||||
public function queryServiceProblemSummary()
|
||||
{
|
||||
return $this->createSubQuery('Hostserviceproblemsummary')
|
||||
->setHostStatusQuery($this)
|
||||
->columns(array(
|
||||
'host_name',
|
||||
'unhandled_service_count'
|
||||
));
|
||||
}
|
||||
|
||||
protected function joinSubQuery(IdoQuery $query, $name, $filter, $and, $negate, &$additionalFilter)
|
||||
{
|
||||
if ($name === 'hostgroup') {
|
||||
|
|
|
@ -63,13 +63,6 @@
|
|||
font-size: @font-size-small;
|
||||
}
|
||||
|
||||
// Link to unhandled services in the hosts overview
|
||||
.host-services-incidents {
|
||||
color: @color-critical;
|
||||
font-family: @font-family-wide;
|
||||
font-size: @font-size-small;
|
||||
}
|
||||
|
||||
// Notification recipient in the notifications overview
|
||||
.notification-recipient {
|
||||
color: @text-color-light;
|
||||
|
|
Loading…
Reference in New Issue