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:
Johannes Meyer 2022-02-25 17:02:42 +01:00
parent 2e9a94144f
commit 796742f03d
5 changed files with 0 additions and 225 deletions

View File

@ -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();
}
/**

View File

@ -60,33 +60,6 @@ if (! $this->compact): ?>
'class' => 'rowaction'
)
) ?>
<?php if (isset($summary[$host->host_name])): ?>
<span class="host-services-incidents"> &#40;<?= $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
)
)
) ?>&#41;</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>

View File

@ -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');
}
}

View File

@ -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') {

View File

@ -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;