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.
462 lines
16 KiB
462 lines
16 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
|
|
*/
|
|
|
|
$form = (new CForm())
|
|
->setId('preprocessing-test-form');
|
|
|
|
if ($data['show_prev']) {
|
|
$form
|
|
->addVar('upd_last', '')
|
|
->addVar('upd_prev', '');
|
|
}
|
|
|
|
foreach ($data['inputs'] as $name => $value) {
|
|
if ($name === 'interface') {
|
|
// SNMPv3 additional details about interface.
|
|
if (array_key_exists('useip', $value)) {
|
|
$form->addVar('interface[useip]', $value['useip']);
|
|
}
|
|
if (array_key_exists('interfaceid', $value)) {
|
|
$form->addVar('interface[interfaceid]', $value['interfaceid']);
|
|
}
|
|
continue;
|
|
}
|
|
elseif ($name === 'host' && array_key_exists('hostid', $value)) {
|
|
$form->addVar('hostid', $value['hostid']);
|
|
continue;
|
|
}
|
|
elseif ($name === 'proxyid') {
|
|
continue;
|
|
}
|
|
elseif ($name === 'query_fields' || $name === 'headers' || $name === 'parameters') {
|
|
foreach (['name', 'value'] as $key) {
|
|
if (array_key_exists($key, $value)) {
|
|
$form->addVar($name.'['.$key.']', $value[$key]);
|
|
}
|
|
}
|
|
continue;
|
|
}
|
|
|
|
$form->addItem((new CInput('hidden', $name, $value))->removeId());
|
|
}
|
|
|
|
// Create macros table.
|
|
$macros_table = $data['macros'] ? (new CTable())->addClass(ZBX_STYLE_TEXTAREA_FLEXIBLE_CONTAINER) : null;
|
|
|
|
$i = 0;
|
|
foreach ($data['macros'] as $macro_name => $macro_value) {
|
|
$macros_table->addRow([
|
|
(new CCol(
|
|
(new CTextAreaFlexible('macro_rows['.$i++.']', $macro_name, ['readonly' => true]))
|
|
->setWidth(ZBX_TEXTAREA_MACRO_WIDTH)
|
|
->removeId()
|
|
->removeAttribute('name')
|
|
))->addClass(ZBX_STYLE_TEXTAREA_FLEXIBLE_PARENT),
|
|
(new CCol(RARR()))->addStyle('vertical-align: top;'),
|
|
(new CCol(
|
|
(new CTextAreaFlexible('macros['.$macro_name.']', $macro_value))
|
|
->setWidth(ZBX_TEXTAREA_MACRO_VALUE_WIDTH)
|
|
->setMaxlength(CControllerPopupItemTest::INPUT_MAX_LENGTH)
|
|
->setAttribute('placeholder', _('value'))
|
|
->disableSpellcheck()
|
|
->removeId()
|
|
))->addClass(ZBX_STYLE_TEXTAREA_FLEXIBLE_PARENT)
|
|
]);
|
|
}
|
|
|
|
$form_grid = (new CFormGrid())
|
|
->addClass(CFormGrid::ZBX_STYLE_FORM_GRID_3_1);
|
|
|
|
if ($data['is_item_testable']) {
|
|
$form_grid->addItem([
|
|
new CLabel(_('Get value from host'), 'get_value'),
|
|
(new CFormField(
|
|
(new CCheckBox('get_value', 1))->setChecked($data['get_value'])
|
|
))->addClass(CFormField::ZBX_STYLE_FORM_FIELD_FLUID),
|
|
|
|
(new CLabel(_('Host address'), 'interface_address'))
|
|
->setAsteriskMark($data['interface_address_enabled'])
|
|
->addClass('js-host-address-row'),
|
|
(new CFormField(
|
|
$data['interface_address_enabled']
|
|
? (new CTextBox('interface[address]', $data['inputs']['interface']['address'], false,
|
|
CControllerPopupItemTest::INPUT_MAX_LENGTH
|
|
))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
|
|
: (new CTextBox('interface[address]', '', false, CControllerPopupItemTest::INPUT_MAX_LENGTH))
|
|
->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
|
|
->setEnabled(false)
|
|
))->addClass('js-host-address-row'),
|
|
|
|
(new CLabel(_('Port'), 'interface_port'))->addClass('js-host-address-row'),
|
|
(new CFormField(
|
|
$data['interface_port_enabled']
|
|
? (new CTextBox('interface[port]', $data['inputs']['interface']['port'], '', 64))
|
|
->setWidth(ZBX_TEXTAREA_SMALL_WIDTH)
|
|
: (new CTextBox('interface[port]'))
|
|
->setWidth(ZBX_TEXTAREA_SMALL_WIDTH)
|
|
->setEnabled(false)
|
|
))->addClass('js-host-address-row')
|
|
]);
|
|
|
|
if ($data['show_snmp_form']) {
|
|
$form_grid->addItem([
|
|
(new CLabel(_('SNMP version'), 'label-interface-details-version'))
|
|
->addClass('js-popup-row-snmp-version'),
|
|
(new CFormField(
|
|
(new CSelect('interface[details][version]'))
|
|
->setId('interface_details_version')
|
|
->setFocusableElementId('label-interface-details-version')
|
|
->setValue($data['inputs']['interface']['details']['version'])
|
|
->addOptions(CSelect::createOptionsFromArray([
|
|
SNMP_V1 => _('SNMPv1'),
|
|
SNMP_V2C => _('SNMPv2'),
|
|
SNMP_V3 => _('SNMPv3')
|
|
]))
|
|
))
|
|
->addClass(CFormField::ZBX_STYLE_FORM_FIELD_FLUID)
|
|
->addClass('js-popup-row-snmp-version'),
|
|
|
|
(new CLabel(_('SNMP community'), 'interface[details][community]'))
|
|
->setAsteriskMark()
|
|
->addClass('js-popup-row-snmp-community'),
|
|
(new CFormField(
|
|
(new CTextBox('interface[details][community]', $data['inputs']['interface']['details']['community'],
|
|
false, CControllerPopupItemTest::INPUT_MAX_LENGTH
|
|
))
|
|
->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
|
|
->setAriaRequired()
|
|
))
|
|
->addClass(CFormField::ZBX_STYLE_FORM_FIELD_FLUID)
|
|
->addClass('js-popup-row-snmp-community'),
|
|
|
|
(new CLabel(_('Max repetition count'), 'interface[details][max_repetitions]'))
|
|
->addClass('js-popup-row-snmp-max-repetition'),
|
|
(new CFormField(
|
|
(new CTextBox('interface[details][max_repetitions]',
|
|
$data['inputs']['interface']['details']['max_repetitions'], false,
|
|
CControllerPopupItemTest::INPUT_MAX_LENGTH
|
|
))
|
|
->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
|
|
->setAriaRequired()
|
|
))
|
|
->addClass(CFormField::ZBX_STYLE_FORM_FIELD_FLUID)
|
|
->addClass('js-popup-row-snmp-max-repetition'),
|
|
|
|
(new CLabel(_('Context name'), 'interface[details][contextname]'))
|
|
->addClass('js-popup-row-snmpv3-contextname'),
|
|
(new CFormField(
|
|
(new CTextBox('interface[details][contextname]', $data['inputs']['interface']['details']['contextname'],
|
|
false, CControllerPopupItemTest::INPUT_MAX_LENGTH
|
|
))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
|
|
))
|
|
->addClass(CFormField::ZBX_STYLE_FORM_FIELD_FLUID)
|
|
->addClass('js-popup-row-snmpv3-contextname'),
|
|
|
|
(new CLabel(_('Security name'), 'interface[details][securityname]'))
|
|
->addClass('js-popup-row-snmpv3-securityname'),
|
|
(new CFormField(
|
|
(new CTextBox('interface[details][securityname]',
|
|
$data['inputs']['interface']['details']['securityname'], false,
|
|
CControllerPopupItemTest::INPUT_MAX_LENGTH
|
|
))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
|
|
))
|
|
->addClass(CFormField::ZBX_STYLE_FORM_FIELD_FLUID)
|
|
->addClass('js-popup-row-snmpv3-securityname'),
|
|
|
|
(new CLabel(_('Security level'), 'label-interface-details-securitylevel'))
|
|
->addClass('js-popup-row-snmpv3-securitylevel'),
|
|
(new CFormField(
|
|
(new CSelect('interface[details][securitylevel]'))
|
|
->setId('interface_details_securitylevel')
|
|
->setValue($data['inputs']['interface']['details']['securitylevel'])
|
|
->setFocusableElementId('label-interface-details-securitylevel')
|
|
->addOptions(CSelect::createOptionsFromArray([
|
|
ITEM_SNMPV3_SECURITYLEVEL_NOAUTHNOPRIV => 'noAuthNoPriv',
|
|
ITEM_SNMPV3_SECURITYLEVEL_AUTHNOPRIV => 'authNoPriv',
|
|
ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV => 'authPriv'
|
|
]))
|
|
))
|
|
->addClass(CFormField::ZBX_STYLE_FORM_FIELD_FLUID)
|
|
->addClass('js-popup-row-snmpv3-securitylevel'),
|
|
|
|
(new CLabel(_('Authentication protocol'), 'label-authprotocol'))
|
|
->addClass('js-popup-row-snmpv3-authprotocol'),
|
|
(new CFormField(
|
|
(new CSelect('interfaces[details][authprotocol]'))
|
|
->setValue((int) $data['inputs']['interface']['details']['authprotocol'])
|
|
->setFocusableElementId('label-authprotocol')
|
|
->addOptions(CSelect::createOptionsFromArray(getSnmpV3AuthProtocols()))
|
|
))
|
|
->addClass(CFormField::ZBX_STYLE_FORM_FIELD_FLUID)
|
|
->addClass('js-popup-row-snmpv3-authprotocol'),
|
|
|
|
(new CLabel(_('Authentication passphrase'), 'interface[details][authpassphrase]'))
|
|
->addClass('js-popup-row-snmpv3-authpassphrase'),
|
|
(new CFormField(
|
|
(new CTextBox('interface[details][authpassphrase]',
|
|
$data['inputs']['interface']['details']['authpassphrase'], false,
|
|
CControllerPopupItemTest::INPUT_MAX_LENGTH
|
|
))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
|
|
))
|
|
->addClass(CFormField::ZBX_STYLE_FORM_FIELD_FLUID)
|
|
->addClass('js-popup-row-snmpv3-authpassphrase'),
|
|
|
|
(new CLabel(_('Privacy protocol'), 'label-privprotocol'))->addClass('js-popup-row-snmpv3-privprotocol'),
|
|
(new CFormField(
|
|
(new CSelect('interfaces[details][privprotocol]'))
|
|
->setValue((int) $data['inputs']['interface']['details']['privprotocol'])
|
|
->setFocusableElementId('label-privprotocol')
|
|
->addOptions(CSelect::createOptionsFromArray(getSnmpV3PrivProtocols()))
|
|
))
|
|
->addClass(CFormField::ZBX_STYLE_FORM_FIELD_FLUID)
|
|
->addClass('js-popup-row-snmpv3-privprotocol'),
|
|
|
|
(new CLabel(_('Privacy passphrase'), 'interface[details][privpassphrase]'))
|
|
->addClass('js-popup-row-snmpv3-privpassphrase'),
|
|
(new CFormField(
|
|
(new CTextBox('interface[details][privpassphrase]',
|
|
$data['inputs']['interface']['details']['privpassphrase'], false,
|
|
CControllerPopupItemTest::INPUT_MAX_LENGTH
|
|
))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
|
|
))
|
|
->addClass(CFormField::ZBX_STYLE_FORM_FIELD_FLUID)
|
|
->addClass('js-popup-row-snmpv3-privpassphrase')
|
|
]);
|
|
}
|
|
|
|
$form_grid->addItem([
|
|
(new CLabel(_('Proxy'), 'label-proxy-hostid'))->addClass('js-proxy-hostid-row'),
|
|
(new CFormField(
|
|
(new CSelect('proxyid'))
|
|
->setReadonly(!$data['proxies_enabled'])
|
|
->addOptions(CSelect::createOptionsFromArray([0 => _('(no proxy)')] + $data['proxies']))
|
|
->setFocusableElementId('label-proxy-hostid')
|
|
->setValue(array_key_exists('proxyid', $data['inputs']) ? $data['inputs']['proxyid'] : 0)
|
|
->setId('proxyid')
|
|
->setWidth(ZBX_TEXTAREA_SMALL_WIDTH)
|
|
))
|
|
->addClass(CFormField::ZBX_STYLE_FORM_FIELD_FLUID)
|
|
->addClass('js-proxy-hostid-row'),
|
|
|
|
(new CFormField(
|
|
(new CSimpleButton(_('Get value')))
|
|
->setId('get_value_btn')
|
|
->addClass(ZBX_STYLE_BTN_ALT)
|
|
))
|
|
->addClass(CFormField::ZBX_STYLE_FORM_FIELD_OFFSET_3)
|
|
->addClass('js-get-value-row')
|
|
->addStyle('text-align: right;')
|
|
]);
|
|
}
|
|
|
|
$form_grid->addItem([
|
|
new CLabel(_('Value'), 'value'),
|
|
new CFormField(
|
|
(new CMultilineInput('value', '', [
|
|
'disabled' => false,
|
|
'readonly' => false
|
|
]))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
|
|
),
|
|
|
|
new CLabel(_('Time'), 'time'),
|
|
new CFormField(
|
|
(new CTextBox(null, 'now', true))
|
|
->setWidth(ZBX_TEXTAREA_SMALL_WIDTH)
|
|
->setId('time')
|
|
),
|
|
|
|
($data['test_type'] == CControllerPopupItemTestEdit::ZBX_TEST_TYPE_LLD)
|
|
? null
|
|
: (new CFormField((new CCheckBox('not_supported'))->setLabel(_('Not supported'))))
|
|
->addClass(CFormField::ZBX_STYLE_FORM_FIELD_FLUID),
|
|
|
|
new CLabel(_('Previous value'), 'prev_item_value'),
|
|
new CFormField(
|
|
(new CMultilineInput('prev_value', '', [
|
|
'disabled' => !$data['show_prev']
|
|
]))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
|
|
),
|
|
|
|
new CLabel(_('Prev. time'), 'prev_time'),
|
|
new CFormField(
|
|
(new CTextBox('prev_time', $data['prev_time']))
|
|
->setEnabled($data['show_prev'])
|
|
->setWidth(ZBX_TEXTAREA_SMALL_WIDTH)
|
|
),
|
|
|
|
new CLabel(_('End of line sequence'), 'eol'),
|
|
(new CFormField(
|
|
(new CRadioButtonList('eol', $data['eol']))
|
|
->addValue(_('LF'), ZBX_EOL_LF)
|
|
->addValue(_('CRLF'), ZBX_EOL_CRLF)
|
|
->setModern(true)
|
|
))->addClass(CFormField::ZBX_STYLE_FORM_FIELD_FLUID)
|
|
]);
|
|
|
|
if ($macros_table) {
|
|
$form_grid->addItem([
|
|
new CLabel(_('Macros')),
|
|
(new CFormField(
|
|
(new CDiv($macros_table))
|
|
->addStyle('width: 675px;')
|
|
->addClass(ZBX_STYLE_TABLE_FORMS_SEPARATOR)
|
|
))->addClass(CFormField::ZBX_STYLE_FORM_FIELD_FLUID)
|
|
]);
|
|
}
|
|
|
|
if (count($data['steps']) > 0) {
|
|
// Create results table.
|
|
$result_table = (new CTable())
|
|
->setId('preprocessing-steps')
|
|
->addClass('table-forms preprocessing-test-results')
|
|
->addStyle('width: 100%;')
|
|
->setHeader([
|
|
'',
|
|
(new CColHeader(_('Name')))->addStyle('width: 100%;'),
|
|
(new CColHeader(_('Result')))->addClass(ZBX_STYLE_RIGHT)
|
|
]);
|
|
|
|
foreach ($data['steps'] as $i => $step) {
|
|
$form
|
|
->addVar('steps['.$i.'][type]', $step['type'])
|
|
->addVar('steps['.$i.'][error_handler]', $step['error_handler'])
|
|
->addVar('steps['.$i.'][error_handler_params]', $step['error_handler_params']);
|
|
|
|
// Temporary solution to fix "\n\n1" conversion to "\n1" in the hidden textarea field after jQuery.append().
|
|
if ($step['type'] == ZBX_PREPROC_CSV_TO_JSON || $step['type'] == ZBX_PREPROC_VALIDATE_RANGE) {
|
|
$form->addItem(new CInput('hidden', 'steps['.$i.'][params]', $step['params']));
|
|
}
|
|
else {
|
|
$form->addVar('steps['.$i.'][params]', $step['params']);
|
|
}
|
|
|
|
$result_table->addRow([
|
|
(new CCol($step['num'].':')),
|
|
(new CCol($step['name']))
|
|
->setId('preproc-test-step-'.$i.'-name')
|
|
->addClass(ZBX_STYLE_WORDBREAK),
|
|
(new CCol())
|
|
->addClass(ZBX_STYLE_RIGHT)
|
|
->setId('preproc-test-step-'.$i.'-result')
|
|
]);
|
|
}
|
|
|
|
$form_grid->addItem([
|
|
new CLabel(_('Preprocessing steps')),
|
|
(new CFormField(
|
|
(new CDiv($result_table))
|
|
->addClass(ZBX_STYLE_TABLE_FORMS_SEPARATOR)
|
|
->addStyle('width: 675px;')
|
|
))->addClass(CFormField::ZBX_STYLE_FORM_FIELD_FLUID)
|
|
]);
|
|
}
|
|
|
|
if ($data['show_final_result']) {
|
|
$form_grid->addItem([
|
|
(new CLabel(_('Result')))->addClass('js-final-result'),
|
|
(new CFormField())->addClass(CFormField::ZBX_STYLE_FORM_FIELD_FLUID)
|
|
]);
|
|
}
|
|
|
|
$form->addItem($form_grid);
|
|
|
|
// Enable form submitting on Enter.
|
|
$form->addItem((new CSubmitButton())->addClass(ZBX_STYLE_FORM_SUBMIT_HIDDEN));
|
|
|
|
$templates = [
|
|
(new CTag('script', true))
|
|
->setAttribute('type', 'text/x-jquery-tmpl')
|
|
->setId('preprocessing-step-error-icon')
|
|
->addItem(makeErrorIcon('#{error}')),
|
|
(new CTag('script', true))
|
|
->setAttribute('type', 'text/x-jquery-tmpl')
|
|
->setId('preprocessing-gray-label')
|
|
->addItem(
|
|
(new CDiv('#{label}'))
|
|
->addStyle('margin-top: 5px;')
|
|
->addClass(ZBX_STYLE_GREY)
|
|
),
|
|
(new CTag('script', true))
|
|
->setAttribute('type', 'text/x-jquery-tmpl')
|
|
->setId('preprocessing-step-result')
|
|
->addItem(
|
|
(new CDiv(
|
|
(new CSpan('#{result}'))
|
|
->addClass(ZBX_STYLE_LINK_ACTION)
|
|
->setHint('#{result}', 'hintbox-wrap')
|
|
))
|
|
->addStyle('max-width: '.ZBX_TEXTAREA_STANDARD_WIDTH.'px;')
|
|
->addClass(ZBX_STYLE_OVERFLOW_ELLIPSIS)
|
|
),
|
|
(new CTag('script', true))
|
|
->setAttribute('type', 'text/x-jquery-tmpl')
|
|
->setId('preprocessing-step-action-done')
|
|
->addItem(
|
|
(new CDiv([
|
|
'#{action_name} ',
|
|
(new CDiv(
|
|
(new CSpan('#{failed}'))
|
|
->addClass(ZBX_STYLE_LINK_ACTION)
|
|
->setHint('#{failed}', 'hintbox-wrap')
|
|
))
|
|
->addStyle('max-width: '.ZBX_TEXTAREA_STANDARD_WIDTH.'px;')
|
|
->addClass(ZBX_STYLE_OVERFLOW_ELLIPSIS)
|
|
->addClass(ZBX_STYLE_REL_CONTAINER)
|
|
]))
|
|
->addStyle('margin-top: 1px;')
|
|
->addClass(ZBX_STYLE_GREY)
|
|
)
|
|
];
|
|
|
|
$warning_box = $data['show_warning']
|
|
? makeMessageBox(ZBX_STYLE_MSG_WARNING, [[
|
|
'message' => _('Item contains user-defined macros with secret values. Values of these macros should be entered manually.')
|
|
]])
|
|
: null;
|
|
|
|
$output = [
|
|
'header' => $data['title'],
|
|
'doc_url' => CDocHelper::getUrl(CDocHelper::POPUP_TEST_EDIT),
|
|
'script_inline' => $this->readJsFile('popup.itemtestedit.view.js.php'),
|
|
'body' => (new CDiv([$warning_box, $form, $templates]))->toString(),
|
|
'cancel_action' => 'return saveItemTestInputs();',
|
|
'buttons' => [
|
|
[
|
|
'title' => ($data['is_item_testable'] && $data['get_value']) ? _('Get value and test') : _('Test'),
|
|
'keepOpen' => true,
|
|
'enabled' => true,
|
|
'isSubmit' => true,
|
|
'action' => 'return itemCompleteTest(overlay);'
|
|
]
|
|
]
|
|
];
|
|
|
|
if ($data['user']['debug_mode'] == GROUP_DEBUG_MODE_ENABLED) {
|
|
CProfiler::getInstance()->stop();
|
|
$output['debug'] = CProfiler::getInstance()->make()->toString();
|
|
}
|
|
|
|
echo json_encode($output);
|