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.

188 lines
5.3 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.
**/
/**
* Top hosts widget view.
*
* @var CView $this
* @var array $data
*/
use Widgets\TopHosts\Widget;
use Zabbix\Widgets\Fields\CWidgetFieldColumnsList;
$table = new CTableInfo();
if ($data['error'] !== null) {
$table->setNoDataMessage($data['error']);
}
else {
$header = [];
foreach ($data['configuration'] as $column_config) {
if ($column_config['data'] == CWidgetFieldColumnsList::DATA_ITEM_VALUE) {
if ($column_config['display'] == CWidgetFieldColumnsList::DISPLAY_AS_IS) {
$header[] = (new CColHeader($column_config['name']))->addClass(ZBX_STYLE_CENTER);
}
else {
$header[] = (new CColHeader($column_config['name']))->setColSpan(2);
}
}
else {
$header[] = $column_config['name'];
}
}
$table->setHeader($header);
foreach ($data['rows'] as $columns) {
$row = [];
foreach ($columns as $i => $column) {
$column_config = $data['configuration'][$i];
if ($column === null) {
if ($column_config['data'] == CWidgetFieldColumnsList::DATA_ITEM_VALUE
&& $column_config['display'] != CWidgetFieldColumnsList::DISPLAY_AS_IS) {
$row[] = (new CCol(''))->setColSpan(2);
}
else {
$row[] = '';
}
continue;
}
$color = $column_config['base_color'];
if ($column_config['data'] == CWidgetFieldColumnsList::DATA_ITEM_VALUE
&& $column_config['display'] == CWidgetFieldColumnsList::DISPLAY_AS_IS
&& array_key_exists('thresholds', $column_config)) {
foreach ($column_config['thresholds'] as $threshold) {
$threshold_value = $column['is_binary_units']
? $threshold['threshold_binary']
: $threshold['threshold'];
if ($column['value'] < $threshold_value) {
break;
}
$color = $threshold['color'];
}
}
switch ($column_config['data']) {
case CWidgetFieldColumnsList::DATA_HOST_NAME:
$row[] = (new CCol(
(new CLinkAction($column['value']))->setMenuPopup(CMenuPopupHelper::getHost($column['hostid']))
))->addStyle($color !== '' ? 'background-color: #' . $color : null);
break;
case CWidgetFieldColumnsList::DATA_TEXT:
$row[] = (new CCol($column['value']))
->addStyle($color !== '' ? 'background-color: #' . $color : null);
break;
case CWidgetFieldColumnsList::DATA_ITEM_VALUE:
if ($column['item']['value_type'] == ITEM_VALUE_TYPE_BINARY) {
$formatted_value = italic(_('binary value'))->addClass($color === '' ? ZBX_STYLE_GREY : null);
$column['value'] = _('binary value');
}
else {
$formatted_value = formatHistoryValue($column['value'], $column['item'], true, [
'decimals' => $column_config['decimal_places'],
'decimals_exact' => true,
'small_scientific' => false,
'zero_as_zero' => false
]);
}
if ($column_config['display'] == CWidgetFieldColumnsList::DISPLAY_AS_IS) {
$row[] = (new CCol())
->addStyle($color !== '' ? 'background-color: #' . $color : null)
->addItem(
(new CDiv($formatted_value))
->addClass(ZBX_STYLE_CENTER)
->addClass(ZBX_STYLE_CURSOR_POINTER)
->setHint(
(new CDiv($column['value']))->addClass(ZBX_STYLE_HINTBOX_WRAP)
)
);
break;
}
$bar_gauge = (new CBarGauge())
->setValue($column['value'])
->setAttribute('fill', $column_config['base_color'] !== ''
? '#' . $column_config['base_color']
: Widget::DEFAULT_FILL
)
->setAttribute('min', $column['is_binary_units']
? $column_config['min_binary']
: $column_config['min']
)
->setAttribute('max', $column['is_binary_units']
? $column_config['max_binary']
: $column_config['max']
);
if ($column_config['display'] == CWidgetFieldColumnsList::DISPLAY_BAR) {
$bar_gauge->setAttribute('solid', 1);
}
if (array_key_exists('thresholds', $column_config)) {
foreach ($column_config['thresholds'] as $threshold) {
$threshold_value = $column['is_binary_units']
? $threshold['threshold_binary']
: $threshold['threshold'];
$bar_gauge->addThreshold($threshold_value, '#'.$threshold['color']);
}
}
$row[] = new CCol($bar_gauge);
$row[] = (new CCol())
->addStyle('width: 0;')
->addItem(
(new CDiv($formatted_value))
->addClass(ZBX_STYLE_CURSOR_POINTER)
->addClass(ZBX_STYLE_NOWRAP)
->setHint(
(new CDiv($column['value']))->addClass(ZBX_STYLE_HINTBOX_WRAP)
)
);
break;
}
}
$table->addRow($row);
}
}
(new CWidgetView($data))
->addItem($table)
->show();