✏️ 正在编辑: CScreenEvents.php
路径:
/usr/share/zabbix/include/classes/screens/CScreenEvents.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php /* ** Zabbix ** Copyright (C) 2001-2021 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. **/ class CScreenEvents extends CScreenBase { /** * Process screen. * * @return CDiv (screen inside container) */ public function get() { $table = (new CTableInfo())->setHeader([_('Time'), _('Recovery time'), _('Host'), _('Description'), _('Value'), _('Severity') ]); $triggers = API::Trigger()->get([ 'output' => [], 'selectHosts' => ['hostid', 'name'], 'skipDependent' => true, 'monitored' => true, 'sortfield' => 'lastchange', 'sortorder' => ZBX_SORT_DOWN, 'limit' => $this->screenitem['elements'], 'preservekeys' => true ]); $events = API::Event()->get([ 'output' => ['eventid', 'r_eventid', 'objectid', 'clock', 'ns', 'name', 'acknowledged', 'severity'], 'select_acknowledges' => ['action'], 'source' => EVENT_SOURCE_TRIGGERS, 'object' => EVENT_OBJECT_TRIGGER, 'value' => TRIGGER_VALUE_TRUE, 'objectids' => array_keys($triggers), 'sortfield' => ['clock', 'eventid'], 'sortorder' => ZBX_SORT_DOWN, 'limit' => $this->screenitem['elements'] ]); $sort_clock = []; $sort_event = []; foreach ($events as $key => $event) { if (!array_key_exists($event['objectid'], $triggers)) { continue; } $events[$key]['host'] = reset($triggers[$event['objectid']]['hosts']); $sort_clock[$key] = $event['clock']; $sort_event[$key] = $event['eventid']; } array_multisort($sort_clock, SORT_DESC, $sort_event, SORT_DESC, $events); if ($events) { $r_eventids = []; foreach ($events as $event) { $r_eventids[$event['r_eventid']] = true; } unset($r_eventids[0]); $r_events = $r_eventids ? API::Event()->get([ 'output' => ['clock'], 'source' => EVENT_SOURCE_TRIGGERS, 'object' => EVENT_OBJECT_TRIGGER, 'eventids' => array_keys($r_eventids), 'preservekeys' => true ]) : []; foreach ($events as &$event) { if (array_key_exists($event['r_eventid'], $r_events)) { $event['r_clock'] = $r_events[$event['r_eventid']]['clock']; } else { $event['r_clock'] = 0; } } unset($event); } foreach ($events as $event) { $host = $event['host']; if ($event['r_eventid'] == 0) { $in_closing = false; foreach ($event['acknowledges'] as $acknowledge) { if (($acknowledge['action'] & ZBX_PROBLEM_UPDATE_CLOSE) == ZBX_PROBLEM_UPDATE_CLOSE) { $in_closing = true; break; } } $value = $in_closing ? TRIGGER_VALUE_FALSE : TRIGGER_VALUE_TRUE; $value_str = $in_closing ? _('CLOSING') : _('PROBLEM'); $value_clock = $in_closing ? time() : $event['clock']; } else { $value = TRIGGER_VALUE_FALSE; $value_str = _('RESOLVED'); $value_clock = $event['r_clock']; } $statusSpan = new CSpan($value_str); // Add colors span depending on configuration and trigger parameters. addTriggerValueStyle($statusSpan, $value, $event['clock'], $event['acknowledged'] == EVENT_ACKNOWLEDGED); $table->addRow([ zbx_date2str(DATE_TIME_FORMAT_SECONDS, $event['clock']), ($event['r_eventid'] == 0) ? '' : zbx_date2str(DATE_TIME_FORMAT_SECONDS, $event['r_clock']), $host['name'], CWebUser::checkAccess(CRoleHelper::UI_MONITORING_PROBLEMS) ? new CLink( $event['name'], 'tr_events.php?triggerid='.$event['objectid'].'&eventid='.$event['eventid'] ) : $event['name'], $statusSpan, getSeverityCell($event['severity']) ]); } $footer = (new CList()) ->addItem(_s('Updated: %1$s', zbx_date2str(TIME_FORMAT_SECONDS))) ->addClass(ZBX_STYLE_DASHBRD_WIDGET_FOOT); return $this->getOutput((new CUiWidget(uniqid(), [$table, $footer]))->setHeader(_('History of events'))); } }
💾 保存文件
← 返回文件管理器