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.
zabbix/ui/app/views/reports.actionlog.list.php

204 lines
5.6 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
* @var array $data
*/
$this->addJsFile('gtlc.js');
$this->addJsFile('class.calendar.js');
$this->includeJsFile('reports.actionlog.list.js.php');
$filter_status_options = [];
foreach ($data['statuses'] as $value => $label) {
$filter_status_options[] = [
'label' => $label,
'value' => $value,
'checked' => in_array($value, $data['actionlog_statuses'])
];
}
$filter = (new CFilter())
->setResetUrl((new CUrl('zabbix.php'))->setArgument('action', $data['action']))
->setProfile($data['timeline']['profileIdx'])
->addVar('action', $data['action'])
->addTimeSelector($data['timeline']['from'], $data['timeline']['to'], true, 'web.actionlog.filter')
->setActiveTab($data['active_tab'])
->addFilterTab(_('Filter'), [
(new CFormList())
->addRow(new CLabel(_('Recipients'), 'filter_userids__ms'), [
(new CMultiSelect([
'name' => 'filter_userids[]',
'object_name' => 'users',
'data' => $data['userids'],
'placeholder' => '',
'popup' => [
'parameters' => [
'srctbl' => 'users',
'srcfld1' => 'userid',
'srcfld2' => 'fullname',
'dstfrm' => 'zbx_filter',
'dstfld1' => 'filter_userids_'
]
]
]))->setWidth(ZBX_TEXTAREA_FILTER_STANDARD_WIDTH)
])
->addRow(new CLabel(_('Actions'), 'filter_actionids__ms'), [
(new CMultiSelect([
'name' => 'filter_actionids[]',
'object_name' => 'actions',
'data' => $data['actionids'],
'placeholder' => '',
'popup' => [
'parameters' => [
'srctbl' => 'actions',
'srcfld1' => 'actionid',
'srcfld2' => 'name',
'dstfrm' => 'zbx_filter',
'dstfld1' => 'filter_actionids_'
]
]
]))->setWidth(ZBX_TEXTAREA_FILTER_STANDARD_WIDTH)
])
->addRow(new CLabel(_('Media types'), 'filter_mediatypeids__ms'), [
(new CMultiSelect([
'name' => 'filter_mediatypeids[]',
'object_name' => 'media_types',
'data' => $data['mediatypeids'],
'placeholder' => '',
'popup' => [
'parameters' => [
'srctbl' => 'media_types',
'srcfld1' => 'mediatypeid',
'srcfld2' => 'name',
'dstfrm' => 'zbx_filter',
'dstfld1' => 'filter_mediatypeids_'
]
]
]))->setWidth(ZBX_TEXTAREA_FILTER_STANDARD_WIDTH)
]),
(new CFormList())
->addRow(_('Status'),
(new CCheckBoxList('filter_statuses'))
->setId('filter_status')
->setColumns(3)
->setWidth(360)
->setOptions($filter_status_options))
->addRow(_('Search string'),
(new CTextBox('filter_messages', $data['messages']))
->setWidth(ZBX_TEXTAREA_FILTER_STANDARD_WIDTH)
)
]);
$actionlog_list = (new CTableInfo())
->setHeader([
_('Time'),
_('Action'),
_('Media type'),
_('Recipient'),
_('Message'),
_('Status'),
_('Info')
]);
foreach ($data['alerts'] as $alert) {
$mediatype = array_pop($alert['mediatypes']);
$message = $alert['alerttype'] == ALERT_TYPE_MESSAGE
? [
bold(_('Subject').':'),
BR(),
$alert['subject'],
BR(),
BR(),
bold(_('Message').':'),
BR(),
zbx_nl2br($alert['message'])
]
: [
bold(_('Command').':'),
BR(),
zbx_nl2br($alert['message'])
];
if ($alert['status'] == ALERT_STATUS_SENT) {
$status = ($alert['alerttype'] == ALERT_TYPE_MESSAGE)
? (new CSpan(_('Sent')))->addClass(ZBX_STYLE_GREEN)
: (new CSpan(_('Executed')))->addClass(ZBX_STYLE_GREEN);
}
elseif ($alert['status'] == ALERT_STATUS_NOT_SENT || $alert['status'] == ALERT_STATUS_NEW) {
$status = (new CSpan([
_('In progress').':',
BR(),
_n('%1$s retry left', '%1$s retries left', $mediatype['maxattempts'] - $alert['retries'])
]))->addClass(ZBX_STYLE_YELLOW);
}
else {
$status = (new CSpan(_('Failed')))->addClass(ZBX_STYLE_RED);
}
$info_icons = [];
if ($alert['error'] !== '') {
$info_icons[] = makeErrorIcon($alert['error']);
}
$actionlog_list->addRow([
zbx_date2str(DATE_TIME_FORMAT_SECONDS, $alert['clock']),
$data['actions'][$alert['actionid']]['name'],
$mediatype ? $mediatype['name'] : '',
array_key_exists('userid', $alert) && $alert['userid']
? makeEventDetailsTableUser($alert + ['action_type' => ZBX_EVENT_HISTORY_ALERT], $data['users'])
: zbx_nl2br($alert['sendto']),
$message,
$status,
makeInformationList($info_icons)
]);
}
(new CHtmlPage())
->setTitle(_('Action log'))
->setDocUrl(CDocHelper::getUrl(CDocHelper::ADMINISTRATION_ACTIONLOG_LIST))
->setControls(
(new CTag('nav', true,
(new CList())
->addItem(
(new CRedirectButton(_('Export to CSV'), (new CUrl())->setArgument('action', 'actionlog.csv')))
->setId('export_csv')
)
))->setAttribute('aria-label', _('Content controls'))
)
->addItem($filter)
->addItem(
(new CForm('get'))
->setName('auditForm')
->addItem([$actionlog_list, $data['paging']])
)
->show();
(new CScriptTag('
view.init('.json_encode($data['timeline'], JSON_THROW_ON_ERROR).');
'))
->setOnDocumentReady()
->show();