Skip to content

Commit d975fef

Browse files
Introduce SLA Chart reports
1 parent 334aaf8 commit d975fef

File tree

7 files changed

+729
-0
lines changed

7 files changed

+729
-0
lines changed

configuration.php

+1
Original file line numberDiff line numberDiff line change
@@ -574,4 +574,5 @@
574574
$this->provideJsFile('loadmore.js');
575575
$this->provideJsFile('migrate.js');
576576
$this->provideJsFile('progress-bar.js');
577+
$this->provideJsFile('billboard.js');
577578
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
3+
/* Icinga DB Web | (c) 2024 Icinga GmbH | GPLv2 */
4+
5+
namespace Icinga\Module\Icingadb\ProvidedHook\Reporting;
6+
7+
use Icinga\Application\Icinga;
8+
use Icinga\Module\Icingadb\Model\Host;
9+
use Icinga\Module\Reporting\Timerange;
10+
use ipl\Sql\Expression;
11+
use ipl\Stdlib\Filter\Rule;
12+
13+
use function ipl\I18n\t;
14+
15+
class HostSlaChartReport extends SlaChartReport
16+
{
17+
public function getName()
18+
{
19+
$name = t('Host SLA Chart');
20+
if (Icinga::app()->getModuleManager()->hasEnabled('idoreports')) {
21+
$name .= ' (Icinga DB)';
22+
}
23+
24+
return $name;
25+
}
26+
27+
protected function fetchSla(Timerange $timerange, Rule $filter = null)
28+
{
29+
$sla = Host::on($this->getDb())
30+
->columns([
31+
'id',
32+
'display_name',
33+
'sla' => new Expression(sprintf(
34+
"get_sla_ok_percent(%s, NULL, '%s', '%s')",
35+
'host.id',
36+
$timerange->getStart()->format('Uv'),
37+
$timerange->getEnd()->format('Uv')
38+
)),
39+
]);
40+
41+
$this->applyRestrictions($sla);
42+
43+
if ($filter !== null) {
44+
$sla->filter($filter);
45+
}
46+
47+
return $sla;
48+
}
49+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
3+
/* Icinga DB Web | (c) 2024 Icinga GmbH | GPLv2 */
4+
5+
namespace Icinga\Module\Icingadb\ProvidedHook\Reporting;
6+
7+
use Icinga\Application\Icinga;
8+
use Icinga\Module\Icingadb\Model\Service;
9+
use Icinga\Module\Reporting\Timerange;
10+
use ipl\Sql\Expression;
11+
use ipl\Stdlib\Filter\Rule;
12+
13+
use function ipl\I18n\t;
14+
15+
class ServiceSlaChartReport extends SlaChartReport
16+
{
17+
public function getName()
18+
{
19+
$name = t('Service SLA Chart');
20+
if (Icinga::app()->getModuleManager()->hasEnabled('idoreports')) {
21+
$name .= ' (Icinga DB)';
22+
}
23+
24+
return $name;
25+
}
26+
27+
protected function fetchSla(Timerange $timerange, Rule $filter = null)
28+
{
29+
$sla = Service::on($this->getDb())
30+
->columns([
31+
'id',
32+
'host.display_name',
33+
'display_name',
34+
'sla' => new Expression(sprintf(
35+
"get_sla_ok_percent(%s, %s, '%s', '%s')",
36+
'service.host_id',
37+
'service.id',
38+
$timerange->getStart()->format('Uv'),
39+
$timerange->getEnd()->format('Uv')
40+
))
41+
]);
42+
43+
$sla->resetOrderBy()->orderBy('host.display_name')->orderBy('display_name');
44+
45+
$this->applyRestrictions($sla);
46+
47+
if ($filter !== null) {
48+
$sla->filter($filter);
49+
}
50+
51+
return $sla;
52+
}
53+
}

0 commit comments

Comments
 (0)