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();