You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

132 lines
4.2 KiB

<?php declare(strict_types = 0);
/*
** Zabbix
** Copyright (C) 2001-2023 Zabbix SIA
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
**/
/**
* @var CPartial $this
* @var array $data
*/
$parents = [];
while ($parent = array_shift($data['service']['parents'])) {
$parents[] = (new CLink($parent['name'],
(new CUrl('zabbix.php'))
->setArgument('action', 'service.list')
->setArgument('serviceid', $parent['serviceid'])
))->setAttribute('data-serviceid', $parent['serviceid']);
$parents[] = CViewHelper::showNum($parent['children']);
if (!$data['service']['parents']) {
break;
}
$parents[] = ', ';
}
$slas = [];
if (array_key_exists('slas', $data)) {
foreach ($data['slas'] as $sla) {
$sla_html = [
new CLink($sla['name'],
(new CUrl('zabbix.php'))
->setArgument('action', 'slareport.list')
->setArgument('filter_slaid', $sla['slaid'])
->setArgument('filter_set', 1)
)
];
if ($sla['sli']['sli']) {
$hint = (new CTable())
->addClass(ZBX_STYLE_LIST_TABLE)
->setHeader([_('Reporting period'), _('SLO'), _('SLI'), _('Uptime'), _('Downtime'), _('Error budget')]);
foreach (array_reverse($sla['sli']['sli'], true) as $period_index => $sli) {
$hint->addRow([
CSlaHelper::getPeriodTag((int) $sla['period'], $sla['sli']['periods'][$period_index]['period_from'],
$sla['sli']['periods'][$period_index]['period_to'], $sla['timezone']
),
CSlaHelper::getSloTag((float) $sla['slo']),
CSlaHelper::getSliTag($sli[0]['sli'], (float) $sla['slo']),
CSlaHelper::getUptimeTag($sli[0]['uptime']),
CSlaHelper::getDowntimeTag($sli[0]['downtime']),
CSlaHelper::getErrorBudgetTag($sli[0]['error_budget'])
]);
}
$current_period_sli = $sla['sli']['sli'][count($sla['sli']['sli']) - 1][0]['sli'];
$sla_html[] = ': ';
$sla_html[] = CSlaHelper::getSliTag($current_period_sli, (float) $sla['slo']);
$sla_html[] = (new CButtonIcon(ZBX_ICON_ALERT_WITH_CONTENT))
->setAttribute('data-content', '?')
->setHint($hint);
}
$slas[] = (new CDiv($sla_html))->addClass(ZBX_STYLE_SERVICE_INFO_VALUE_SLA);
}
if ($data['slas_count'] > count($data['slas'])) {
$slas[] = (new CDiv(HELLIP()))->addClass(ZBX_STYLE_SERVICE_INFO_VALUE_SLA);
}
}
(new CDiv([
(new CDiv())
->addClass(ZBX_STYLE_SERVICE_INFO_GRID)
->addItem([
(new CDiv($data['service']['name']))->addClass(ZBX_STYLE_SERVICE_NAME),
(new CDiv(
$data['is_editable']
? (new CButtonIcon(ZBX_ICON_PENCIL, _('Edit')))
->addClass('js-edit-service')
->setAttribute('data-serviceid', $data['service']['serviceid'])
->setEnabled(!$data['service']['readonly'])
: null
))->addClass(ZBX_STYLE_SERVICE_ACTIONS)
]),
(new CDiv())
->addClass(ZBX_STYLE_SERVICE_INFO_GRID)
->addItem([
(new CDiv(_('Parent services')))->addClass(ZBX_STYLE_SERVICE_INFO_LABEL),
(new CDiv($parents))->addClass(ZBX_STYLE_SERVICE_INFO_VALUE)
])
->addItem([
(new CDiv(_('Status')))->addClass(ZBX_STYLE_SERVICE_INFO_LABEL),
(new CDiv(
(new CDiv(CSeverityHelper::getName((int) $data['service']['status'])))
->addClass(ZBX_STYLE_SERVICE_STATUS))
)->addClass(ZBX_STYLE_SERVICE_INFO_VALUE)
])
->addItem([
(new CDiv(_('SLA')))->addClass(ZBX_STYLE_SERVICE_INFO_LABEL),
(new CDiv($slas))->addClass(ZBX_STYLE_SERVICE_INFO_VALUE)
])
->addItem([
(new CDiv(_('Tags')))->addClass(ZBX_STYLE_SERVICE_INFO_LABEL),
(new CDiv($data['service']['tags']))->addClass(ZBX_STYLE_SERVICE_INFO_VALUE)
])
]))
->addClass(ZBX_STYLE_SERVICE_INFO)
->addClass('service-status-'.CSeverityHelper::getStyle((int) $data['service']['status']))
->show();