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.
299 lines
8.5 KiB
299 lines
8.5 KiB
<?php
|
|
/*
|
|
** 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 CView $this
|
|
*/
|
|
$this->includeJsFile('monitoring.history.js.php');
|
|
|
|
$web_layout_mode = CViewHelper::loadLayoutMode();
|
|
|
|
$html_page = (new CHtmlPage())->setWebLayoutMode($web_layout_mode);
|
|
|
|
$header = [
|
|
'left' => _n('%1$s item', '%1$s items', count($data['items'])),
|
|
'right' => (new CForm('get'))
|
|
->setName('filter_view_as')
|
|
->addVar('itemids', $data['itemids'])
|
|
];
|
|
$header_row = [];
|
|
|
|
$same_host = true;
|
|
$items_numeric = true;
|
|
$host_name = '';
|
|
|
|
if ($data['items']) {
|
|
$first_item = reset($data['items']);
|
|
$host_name = $first_item['hosts'][0]['name'];
|
|
|
|
foreach ($data['items'] as $item) {
|
|
$same_host = ($same_host && $host_name === $item['hosts'][0]['name']);
|
|
$items_numeric = ($items_numeric && array_key_exists($item['value_type'], $data['iv_numeric']));
|
|
}
|
|
}
|
|
|
|
if ((count($data['items']) == 1 || $same_host) && $data['itemids']) {
|
|
$header['left'] = $host_name.NAME_DELIMITER.(count($data['items']) == 1 ? $item['name'] : $header['left']);
|
|
$header_row[] = $header['left'];
|
|
}
|
|
else {
|
|
$header_row[] = $header['left'];
|
|
}
|
|
|
|
if (hasRequest('filter_task')) {
|
|
$header['right']->addVar('filter_task', $data['filter_task']);
|
|
}
|
|
if (hasRequest('filter')) {
|
|
$header['right']->addVar('filter', $data['filter']);
|
|
}
|
|
if (hasRequest('mark_color')) {
|
|
$header['right']->addVar('mark_color', $data['mark_color']);
|
|
}
|
|
|
|
$actions = [
|
|
HISTORY_GRAPH => _('Graph'),
|
|
HISTORY_VALUES => _('Values'),
|
|
HISTORY_LATEST => _('500 latest values')
|
|
];
|
|
|
|
if (!$items_numeric) {
|
|
unset($actions[HISTORY_GRAPH]);
|
|
}
|
|
elseif (count($data['items']) > 1) {
|
|
unset($actions[HISTORY_LATEST]);
|
|
}
|
|
|
|
$action_list = (new CList())
|
|
->addItem([
|
|
new CLabel(new CLabel(_('View as'), 'label-view-as')),
|
|
(new CDiv())->addClass(ZBX_STYLE_FORM_INPUT_MARGIN),
|
|
(new CSelect('action'))
|
|
->setId('filter-view-as')
|
|
->setFocusableElementId('label-view-as')
|
|
->setValue($data['action'])
|
|
->addOptions(CSelect::createOptionsFromArray($actions))
|
|
->setDisabled(!$data['items'])
|
|
]);
|
|
|
|
if ($data['action'] !== HISTORY_GRAPH && $data['action'] !== HISTORY_BATCH_GRAPH) {
|
|
$action_list->addItem((new CSubmit('plaintext', _('As plain text')))->setEnabled((bool) $data['items']));
|
|
}
|
|
|
|
if ($data['action'] == HISTORY_GRAPH && count($data['items']) == 1) {
|
|
$action_list->addItem(get_icon('favorite', [
|
|
'fav' => 'web.favorite.graphids',
|
|
'elid' => $item['itemid'],
|
|
'elname' => 'itemid'
|
|
]));
|
|
}
|
|
|
|
$action_list->addItem(get_icon('kioskmode', ['mode' => $web_layout_mode]));
|
|
|
|
$header['right']->addItem($action_list);
|
|
|
|
// create filter
|
|
$filter_form = new CFilter();
|
|
$filter_tab = [];
|
|
|
|
if ($data['action'] == HISTORY_LATEST || $data['action'] == HISTORY_VALUES) {
|
|
if (array_key_exists($data['value_type'], $data['iv_string']) || !$data['itemids']) {
|
|
$filter_form->addVar('action', $data['action']);
|
|
|
|
$items_data = [];
|
|
if ($data['items']) {
|
|
foreach ($data['items'] as $itemid => $item) {
|
|
if (!array_key_exists($item['value_type'], $data['iv_string'])) {
|
|
unset($data['items'][$itemid]);
|
|
continue;
|
|
}
|
|
|
|
$items_data[] = [
|
|
'id' => $itemid,
|
|
'prefix' => $item['hosts'][0]['name'].NAME_DELIMITER,
|
|
'name' => $item['name']
|
|
];
|
|
}
|
|
CArrayHelper::sort($items_data, ['prefix', 'name']);
|
|
}
|
|
|
|
if ($data['value_type'] == ITEM_VALUE_TYPE_LOG || $data['value_type'] == ITEM_VALUE_TYPE_TEXT
|
|
|| !$data['itemids']) {
|
|
$filterColumn1 = (new CFormList())
|
|
->addRow((new CLabel(_('Items list'), 'itemids__ms')),
|
|
(new CMultiSelect([
|
|
'name' => 'itemids[]',
|
|
'object_name' => 'items',
|
|
'data' => $items_data,
|
|
'popup' => [
|
|
'parameters' => [
|
|
'srctbl' => 'items',
|
|
'srcfld1' => 'itemid',
|
|
'dstfld1' => 'itemids_',
|
|
'real_hosts' => true,
|
|
'value_types' => [ITEM_VALUE_TYPE_LOG, ITEM_VALUE_TYPE_TEXT]
|
|
]
|
|
]
|
|
]))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
|
|
)
|
|
->addRow(_('Value'),
|
|
(new CTextBox('filter', $data['filter']))
|
|
->setWidth(ZBX_TEXTAREA_FILTER_SMALL_WIDTH)
|
|
->removeId()
|
|
);
|
|
|
|
$tasks = [];
|
|
$tasks[] = (new CSelect('filter_task'))
|
|
->setValue($data['filter_task'])
|
|
->setId('filter-task')
|
|
->setFocusableElementId('label-selected')
|
|
->addOptions(CSelect::createOptionsFromArray([
|
|
FILTER_TASK_SHOW => _('Show selected'),
|
|
FILTER_TASK_HIDE => _('Hide selected'),
|
|
FILTER_TASK_MARK => _('Mark selected'),
|
|
FILTER_TASK_INVERT_MARK => _('Mark others')
|
|
]));
|
|
|
|
if (str_in_array($data['filter_task'], [FILTER_TASK_MARK, FILTER_TASK_INVERT_MARK])) {
|
|
$tasks[] = ' ';
|
|
$tasks[] = (new CSelect('mark_color'))
|
|
->setValue(getRequest('mark_color', 0))
|
|
->addOptions(CSelect::createOptionsFromArray([
|
|
MARK_COLOR_RED => _('as Red'),
|
|
MARK_COLOR_GREEN => _('as Green'),
|
|
MARK_COLOR_BLUE => _('as Blue')
|
|
]));
|
|
}
|
|
|
|
$filterColumn1->addRow(new CLabel(_('Selected'), $tasks[0]->getFocusableElementId()), $tasks);
|
|
$filter_tab[] = $filterColumn1;
|
|
}
|
|
}
|
|
}
|
|
|
|
// create history screen
|
|
if ($data['itemids']) {
|
|
$screen = CScreenBuilder::getScreen([
|
|
'resourcetype' => SCREEN_RESOURCE_HISTORY,
|
|
'action' => $data['action'],
|
|
'itemids' => $data['itemids'],
|
|
'pageFile' => (new CUrl('history.php'))
|
|
->setArgument('action', $data['action'])
|
|
->setArgument('itemids', $data['itemids'])
|
|
->setArgument('filter', $data['filter'])
|
|
->setArgument('filter_task', $data['filter_task'])
|
|
->setArgument('mark_color', $data['mark_color'])
|
|
->getUrl(),
|
|
'profileIdx' => $data['profileIdx'],
|
|
'profileIdx2' => $data['profileIdx2'],
|
|
'from' => $data['from'],
|
|
'to' => $data['to'],
|
|
'page' => $data['page'],
|
|
'filter' => $data['filter'],
|
|
'filter_task' => $data['filter_task'],
|
|
'mark_color' => $data['mark_color'],
|
|
'plaintext' => $data['plaintext'],
|
|
'graphtype' => $data['graphtype']
|
|
]);
|
|
}
|
|
|
|
// append plaintext to widget
|
|
if ($data['plaintext']) {
|
|
foreach ($header_row as $text) {
|
|
$html_page->addItem([new CSpan($text), BR()]);
|
|
}
|
|
|
|
if ($data['itemids']) {
|
|
$screen = $screen->get();
|
|
$pre = new CPre();
|
|
foreach ($screen as $text) {
|
|
$pre->addItem([$text, BR()]);
|
|
}
|
|
|
|
$html_page->addItem($pre->addClass(ZBX_STYLE_NOWRAP));
|
|
}
|
|
}
|
|
else {
|
|
$html_page
|
|
->setTitle($header['left'])
|
|
->setDocUrl(CDocHelper::getUrl(CDocHelper::MONITORING_HISTORY))
|
|
->setControls((new CTag('nav', true, $header['right']))->setAttribute('aria-label', _('Content controls')));
|
|
|
|
if ($data['itemids'] && $data['action'] !== HISTORY_LATEST) {
|
|
$filter_form->addTimeSelector($screen->timeline['from'], $screen->timeline['to'],
|
|
$web_layout_mode != ZBX_LAYOUT_KIOSKMODE
|
|
);
|
|
}
|
|
|
|
if ($data['action'] == HISTORY_BATCH_GRAPH) {
|
|
$filter_form
|
|
->hideFilterButtons()
|
|
->addVar('action', $data['action'])
|
|
->addVar('itemids', $data['itemids']);
|
|
|
|
$filter_tab = [
|
|
(new CFormList())->addRow(_('Graph type'),
|
|
(new CRadioButtonList('graphtype', (int) $data['graphtype']))
|
|
->addValue(_('Normal'), GRAPH_TYPE_NORMAL)
|
|
->addValue(_('Stacked'), GRAPH_TYPE_STACKED)
|
|
->setModern(true)
|
|
->onChange('jQuery(this).closest("form").submit();')
|
|
)
|
|
];
|
|
}
|
|
|
|
$filter_form
|
|
->setProfile($data['profileIdx'], $data['profileIdx2'])
|
|
->setActiveTab($data['active_tab']);
|
|
|
|
if ($filter_tab) {
|
|
$filter_form->addFilterTab(_('Filter'), $filter_tab);
|
|
}
|
|
|
|
if ($data['itemids']) {
|
|
if ($data['action'] !== HISTORY_LATEST) {
|
|
$html_page->addItem($filter_form);
|
|
}
|
|
|
|
$html_page->addItem($screen->get());
|
|
|
|
if ($data['action'] !== HISTORY_LATEST) {
|
|
CScreenBuilder::insertScreenStandardJs($screen->timeline);
|
|
}
|
|
}
|
|
else {
|
|
if ($filter_tab) {
|
|
$html_page->addItem($filter_form);
|
|
}
|
|
|
|
$html_page->addItem(
|
|
(new CTableInfo())
|
|
->setHeader([
|
|
(new CColHeader(_('Timestamp')))->addClass(ZBX_STYLE_CELL_WIDTH),
|
|
(new CColHeader(_('Local time')))->addClass(ZBX_STYLE_CELL_WIDTH),
|
|
_('Value')
|
|
])
|
|
->setNoDataMessage(_('Specify some filter condition to see the values.'))
|
|
);
|
|
}
|
|
}
|
|
|
|
$html_page->show();
|