1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
<?php
// Icinga Web 2 Cube Module | (c) 2019 Icinga GmbH | GPLv2
namespace Icinga\Module\Cube\Ido;
use Icinga\Module\Cube\CubeRenderer\ServiceStatusCubeRenderer;
class IdoServiceStatusCube extends IdoCube
{
public function getRenderer()
{
return new ServiceStatusCubeRenderer($this);
}
public function getAvailableFactColumns()
{
return [
'services_cnt' => 'SUM(CASE WHEN ss.has_been_checked = 1 THEN 1 ELSE 0 END)',
'services_critical' => 'SUM(CASE WHEN ss.has_been_checked = 1 AND ss.current_state = 2'
. ' THEN 1 ELSE 0 END)',
'services_unhandled_critical' => 'SUM(CASE WHEN ss.has_been_checked = 1 AND ss.current_state = 2'
. ' AND ss.problem_has_been_acknowledged = 0 AND ss.scheduled_downtime_depth = 0'
. ' THEN 1 ELSE 0 END)',
'services_warning' => 'SUM(CASE WHEN ss.current_state = 1 THEN 1 ELSE 0 END)',
'services_unhandled_warning' => 'SUM(CASE WHEN ss.current_state = 1'
. ' AND ss.problem_has_been_acknowledged = 0 AND ss.scheduled_downtime_depth = 0'
. ' THEN 1 ELSE 0 END)',
'services_unknown' => 'SUM(CASE WHEN ss.current_state = 3 THEN 1 ELSE 0 END)',
'services_unhandled_unknown' => 'SUM(CASE WHEN ss.current_state = 3'
. ' AND ss.problem_has_been_acknowledged = 0 AND ss.scheduled_downtime_depth = 0'
. ' THEN 1 ELSE 0 END)',
];
}
/**
* This returns a list of all available Dimensions
*
* @return array
*/
public function listAvailableDimensions()
{
$this->requireBackend();
$view = $this->backend->select()->from('servicestatus');
$view->applyFilter($this->getMonitoringRestriction());
$select = $view->getQuery()->clearOrder()->getSelectQuery();
$select
->columns('cv.varname')
->join(
['cv' => $this->tableName('icinga_customvariablestatus')],
'cv.object_id = so.object_id',
[]
)
->group('cv.varname');
if (version_compare($this->getIdoVersion(), '1.12.0', '>=')) {
$select->where('cv.is_json = 0');
}
$select->order('cv.varname');
$dimensions = $this->filterProtectedCustomvars($this->db()->fetchCol($select));
$keys = array_map('strtolower', $dimensions);
return array_combine($keys, $dimensions);
}
public function prepareInnerQuery()
{
$this->requireBackend();
$view = $this->backend->select()->from('servicestatus');
$view->getQuery()->requireColumn('service_state');
$view->applyFilter($this->getMonitoringRestriction());
$select = $view->getQuery()->clearOrder()->getSelectQuery();
return $select;
}
public function createDimension($name)
{
$this->registerAvailableDimensions();
if (isset($this->availableDimensions[$name])) {
return clone $this->availableDimensions[$name];
}
return new CustomVarDimension($name, CustomVarDimension::TYPE_SERVICE);
}
}
|