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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
<?php
// Icinga DB Web | (c) 2021 Icinga GmbH | GPLv2
namespace Icinga\Module\Icingadb\ProvidedHook;
use Icinga\Application\Hook\HealthHook;
use Icinga\Module\Icingadb\Common\Database;
use Icinga\Module\Icingadb\Model\Instance;
use ipl\Web\Url;
class IcingaHealth extends HealthHook
{
use Database;
/** @var Instance */
protected $instance;
public function getName(): string
{
return 'Icinga DB';
}
public function getUrl(): Url
{
return Url::fromPath('icingadb/health');
}
public function checkHealth()
{
$instance = $this->getInstance();
if ($instance === null) {
$this->setState(self::STATE_UNKNOWN);
$this->setMessage(t(
'Icinga DB is not running or not writing into the database'
. ' (make sure the icinga feature "icingadb" is enabled)'
));
} elseif ($instance->heartbeat->getTimestamp() < time() - 60) {
$this->setState(self::STATE_CRITICAL);
$this->setMessage(t(
'Icinga DB is not running or not writing into the database'
. ' (make sure the icinga feature "icingadb" is enabled)'
));
} else {
$this->setState(self::STATE_OK);
$this->setMessage(t('Icinga DB is running and writing into the database'));
$warningMessages = [];
if (! $instance->icinga2_active_host_checks_enabled) {
$this->setState(self::STATE_WARNING);
$warningMessages[] = t('Active host checks are disabled');
}
if (! $instance->icinga2_active_service_checks_enabled) {
$this->setState(self::STATE_WARNING);
$warningMessages[] = t('Active service checks are disabled');
}
if (! $instance->icinga2_notifications_enabled) {
$this->setState(self::STATE_WARNING);
$warningMessages[] = t('Notifications are disabled');
}
if ($this->getState() === self::STATE_WARNING) {
$this->setMessage(implode("; ", $warningMessages));
}
}
if ($instance !== null) {
$this->setMetrics([
'heartbeat' => $instance->heartbeat->getTimestamp(),
'responsible' => $instance->responsible,
'icinga2_active_host_checks_enabled' => $instance->icinga2_active_host_checks_enabled,
'icinga2_active_service_checks_enabled' => $instance->icinga2_active_service_checks_enabled,
'icinga2_event_handlers_enabled' => $instance->icinga2_event_handlers_enabled,
'icinga2_flap_detection_enabled' => $instance->icinga2_flap_detection_enabled,
'icinga2_notifications_enabled' => $instance->icinga2_notifications_enabled,
'icinga2_performance_data_enabled' => $instance->icinga2_performance_data_enabled,
'icinga2_start_time' => $instance->icinga2_start_time->getTimestamp(),
'icinga2_version' => $instance->icinga2_version,
'endpoint' => ['name' => $instance->endpoint->name]
]);
}
}
/**
* Get an Icinga DB instance
*
* @return ?Instance
*/
protected function getInstance()
{
if ($this->instance === null) {
$this->instance = Instance::on($this->getDb())
->with('endpoint')
->columns([
'heartbeat',
'responsible',
'icinga2_active_host_checks_enabled',
'icinga2_active_service_checks_enabled',
'icinga2_event_handlers_enabled',
'icinga2_flap_detection_enabled',
'icinga2_notifications_enabled',
'icinga2_performance_data_enabled',
'icinga2_start_time',
'icinga2_version',
'endpoint.name'
])
->first();
}
return $this->instance;
}
}
|