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) 2016 Icinga GmbH | GPLv2
namespace Icinga\Module\Cube\Ido;
use Icinga\Module\Cube\CubeRenderer\HostStatusCubeRenderer;
use Icinga\Module\Cube\Ido\DataView\Hoststatus;
class IdoHostStatusCube extends IdoCube
{
public function getRenderer()
{
return new HostStatusCubeRenderer($this);
}
/**
* @inheritdoc
*/
public function getAvailableFactColumns()
{
return array(
'hosts_cnt' => 'SUM(CASE WHEN hs.has_been_checked = 1 THEN 1 ELSE 0 END)',
'hosts_down' => 'SUM(CASE WHEN hs.has_been_checked = 1 AND hs.current_state = 1'
. ' THEN 1 ELSE 0 END)',
'hosts_unhandled_down' => 'SUM(CASE WHEN hs.has_been_checked = 1 AND hs.current_state = 1'
. ' AND hs.problem_has_been_acknowledged = 0 AND hs.scheduled_downtime_depth = 0'
. ' THEN 1 ELSE 0 END)',
'hosts_unreachable' => 'SUM(CASE WHEN hs.current_state = 2 THEN 1 ELSE 0 END)',
'hosts_unhandled_unreachable' => 'SUM(CASE WHEN hs.current_state = 2'
. ' AND hs.problem_has_been_acknowledged = 0 AND hs.scheduled_downtime_depth = 0'
. ' THEN 1 ELSE 0 END)',
);
}
public function createDimension($name)
{
$this->registerAvailableDimensions();
if (isset($this->availableDimensions[$name])) {
return clone $this->availableDimensions[$name];
}
return new CustomVarDimension($name, CustomVarDimension::TYPE_HOST);
}
/**
* This returns a list of all available Dimensions
*
* @return array
*/
public function listAvailableDimensions()
{
$this->requireBackend();
$view = $this->backend->select()->from('hoststatus');
$view->applyFilter($this->getMonitoringRestriction());
$select = $view->getQuery()->clearOrder()->getSelectQuery();
$select
->columns('cv.varname')
->join(
['cv' => $this->tableName('icinga_customvariablestatus')],
'cv.object_id = ho.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 = new Hoststatus($this->backend);
$view->getQuery()->requireColumn('host_state');
$view->applyFilter($this->getMonitoringRestriction());
$select = $view->getQuery()->clearOrder()->getSelectQuery();
return $select;
}
}
|