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.
208 lines
5.9 KiB
208 lines
5.9 KiB
1 year ago
|
<?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.
|
||
|
**/
|
||
|
|
||
|
|
||
|
$output = [];
|
||
|
|
||
|
if (($messages = getMessages()) !== null) {
|
||
|
$output['messages'] = $messages->toString();
|
||
|
}
|
||
|
|
||
|
if (array_key_exists('problems', $data)) {
|
||
|
// Show trigger description and URL.
|
||
|
$div = new CDiv();
|
||
|
|
||
|
if ($data['trigger']['comments'] !== '') {
|
||
|
$div->addItem(
|
||
|
(new CDiv())
|
||
|
->addItem(zbx_str2links($data['trigger']['comments']))
|
||
|
->addClass(ZBX_STYLE_OVERLAY_DESCR)
|
||
|
->addStyle('max-width: 500px')
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if ($data['trigger']['url'] !== '') {
|
||
|
$trigger_url = CHtmlUrlValidator::validate($data['trigger']['url'], ['allow_user_macro' => false])
|
||
|
? $data['trigger']['url']
|
||
|
: 'javascript: alert('.json_encode(_s('Provided URL "%1$s" is invalid.', $data['trigger']['url'])).');';
|
||
|
|
||
|
$div->addItem(
|
||
|
(new CDiv())
|
||
|
->addItem(new CLink($data['trigger']['url'], $trigger_url))
|
||
|
->addClass(ZBX_STYLE_OVERLAY_DESCR_URL)
|
||
|
->addStyle('max-width: 500px')
|
||
|
);
|
||
|
}
|
||
|
|
||
|
// sort field indicator
|
||
|
$sort_div = (new CSpan())->addClass(ZBX_STYLE_ARROW_DOWN);
|
||
|
|
||
|
if ($data['show_timeline']) {
|
||
|
$header = [
|
||
|
(new CColHeader([_('Time'), $sort_div]))->addClass(ZBX_STYLE_RIGHT),
|
||
|
(new CColHeader())->addClass(ZBX_STYLE_TIMELINE_TH),
|
||
|
(new CColHeader())->addClass(ZBX_STYLE_TIMELINE_TH)
|
||
|
];
|
||
|
}
|
||
|
else {
|
||
|
$header = [[_('Time'), $sort_div]];
|
||
|
}
|
||
|
|
||
|
// Show events.
|
||
|
$table = (new CTableInfo())
|
||
|
->setHeader(array_merge($header, [
|
||
|
_('Recovery time'),
|
||
|
_('Status'),
|
||
|
_('Duration'),
|
||
|
_('Update'),
|
||
|
($data['show_tags'] != SHOW_TAGS_NONE) ? _('Tags') : null
|
||
|
]));
|
||
|
|
||
|
$data += [
|
||
|
'last_clock' => 0,
|
||
|
'sortorder' => ZBX_SORT_DOWN,
|
||
|
'show_three_columns' => false,
|
||
|
'show_two_columns' => false
|
||
|
];
|
||
|
|
||
|
$today = strtotime('today');
|
||
|
|
||
|
if ($data['problems'] && $data['show_tags'] != SHOW_TAGS_NONE) {
|
||
|
$tags = makeTags($data['problems'], true, 'eventid', $data['show_tags'], $data['filter_tags'], null,
|
||
|
$data['tag_name_format'], $data['tag_priority']
|
||
|
);
|
||
|
}
|
||
|
|
||
|
$url_details = $data['allowed_ui_problems']
|
||
|
? (new CUrl('tr_events.php'))
|
||
|
->setArgument('triggerid', $data['trigger']['triggerid'])
|
||
|
->setArgument('eventid', '')
|
||
|
: null;
|
||
|
|
||
|
foreach ($data['problems'] as $problem) {
|
||
|
$can_be_closed = $data['allowed_close'];
|
||
|
$in_closing = false;
|
||
|
|
||
|
if ($problem['r_eventid'] != 0) {
|
||
|
$value = TRIGGER_VALUE_FALSE;
|
||
|
$value_clock = $problem['r_clock'];
|
||
|
$can_be_closed = false;
|
||
|
}
|
||
|
else {
|
||
|
if (hasEventCloseAction($problem['acknowledges'])) {
|
||
|
$in_closing = true;
|
||
|
$can_be_closed = false;
|
||
|
}
|
||
|
|
||
|
$value = $in_closing ? TRIGGER_VALUE_FALSE : TRIGGER_VALUE_TRUE;
|
||
|
$value_clock = $in_closing ? time() : $problem['clock'];
|
||
|
}
|
||
|
|
||
|
$value_str = getEventStatusString($in_closing, $problem);
|
||
|
|
||
|
$cell_clock = ($problem['clock'] >= $today)
|
||
|
? zbx_date2str(TIME_FORMAT_SECONDS, $problem['clock'])
|
||
|
: zbx_date2str(DATE_TIME_FORMAT_SECONDS, $problem['clock']);
|
||
|
|
||
|
if ($url_details !== null) {
|
||
|
$url_details->setArgument('eventid', $problem['eventid']);
|
||
|
$cell_clock = new CCol(new CLink($cell_clock, $url_details));
|
||
|
}
|
||
|
else {
|
||
|
$cell_clock = new CCol($cell_clock);
|
||
|
}
|
||
|
|
||
|
if ($problem['r_eventid'] != 0) {
|
||
|
$cell_r_clock = ($problem['r_clock'] >= $today)
|
||
|
? zbx_date2str(TIME_FORMAT_SECONDS, $problem['r_clock'])
|
||
|
: zbx_date2str(DATE_TIME_FORMAT_SECONDS, $problem['r_clock']);
|
||
|
$cell_r_clock = (new CCol(($url_details !== null)
|
||
|
? new CLink($cell_r_clock, $url_details)
|
||
|
: $cell_r_clock
|
||
|
))
|
||
|
->addClass(ZBX_STYLE_NOWRAP)
|
||
|
->addClass(ZBX_STYLE_RIGHT);
|
||
|
}
|
||
|
else {
|
||
|
$cell_r_clock = '';
|
||
|
}
|
||
|
|
||
|
$is_acknowledged = ($problem['acknowledged'] == EVENT_ACKNOWLEDGED);
|
||
|
$cell_status = new CSpan($value_str);
|
||
|
|
||
|
if (isEventUpdating($in_closing, $problem)) {
|
||
|
$cell_status->addClass('js-blink');
|
||
|
}
|
||
|
|
||
|
// Add colors and blinking to span depending on configuration and trigger parameters.
|
||
|
addTriggerValueStyle($cell_status, $value, $value_clock, $is_acknowledged);
|
||
|
|
||
|
if ($data['show_timeline']) {
|
||
|
if ($data['last_clock'] != 0) {
|
||
|
CScreenProblem::addTimelineBreakpoint($table, $data, $problem, false, false);
|
||
|
}
|
||
|
$data['last_clock'] = $problem['clock'];
|
||
|
|
||
|
$row = [
|
||
|
$cell_clock->addClass(ZBX_STYLE_TIMELINE_DATE),
|
||
|
(new CCol())
|
||
|
->addClass(ZBX_STYLE_TIMELINE_AXIS)
|
||
|
->addClass(ZBX_STYLE_TIMELINE_DOT),
|
||
|
(new CCol())->addClass(ZBX_STYLE_TIMELINE_TD)
|
||
|
];
|
||
|
}
|
||
|
else {
|
||
|
$row = [
|
||
|
$cell_clock
|
||
|
->addClass(ZBX_STYLE_NOWRAP)
|
||
|
->addClass(ZBX_STYLE_RIGHT)
|
||
|
];
|
||
|
}
|
||
|
|
||
|
// Create acknowledge link.
|
||
|
$problem_update_link = ($data['allowed_add_comments'] || $data['allowed_change_severity']
|
||
|
|| $data['allowed_acknowledge'] || $can_be_closed || $data['allowed_suppress'])
|
||
|
? (new CLink(_('Update')))
|
||
|
->addClass(ZBX_STYLE_LINK_ALT)
|
||
|
->setAttribute('data-eventid', $problem['eventid'])
|
||
|
->onClick('acknowledgePopUp({eventids: [this.dataset.eventid]}, this);')
|
||
|
: new CSpan(_('Update'));
|
||
|
|
||
|
$table->addRow(array_merge($row, [
|
||
|
$cell_r_clock,
|
||
|
$cell_status,
|
||
|
(new CCol(
|
||
|
($problem['r_eventid'] != 0)
|
||
|
? zbx_date2age($problem['clock'], $problem['r_clock'])
|
||
|
: zbx_date2age($problem['clock'])
|
||
|
))
|
||
|
->addClass(ZBX_STYLE_NOWRAP),
|
||
|
$problem_update_link,
|
||
|
($data['show_tags'] != SHOW_TAGS_NONE) ? $tags[$problem['eventid']] : null
|
||
|
]));
|
||
|
}
|
||
|
|
||
|
$div->addItem($table);
|
||
|
|
||
|
$output['data'] = $div->toString();
|
||
|
}
|
||
|
|
||
|
echo json_encode($output);
|