✏️ 正在编辑: CControllerReportServices.php
路径:
/usr/share/zabbix/app/controllers/CControllerReportServices.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 CControllerReportServices extends CController { const YEAR_LEFT_SHIFT = 5; private $service = null; protected function init() { $this->disableSIDValidation(); } protected function checkInput() { $fields = [ 'serviceid' => 'fatal|required|db services.serviceid', 'period' => 'in daily,weekly,monthly,yearly', 'year' => 'int32' ]; $ret = $this->validateInput($fields); if (!$ret) { $this->setResponse(new CControllerResponseFatal()); } return $ret; } protected function checkPermissions() { if (!$this->checkAccess(CRoleHelper::UI_MONITORING_SERVICES)) { return false; } $services = API::Service()->get([ 'output' => ['serviceid', 'name', 'showsla', 'goodsla'], 'serviceids' => [$this->getInput('serviceid')] ]); if (!$services) { return false; } $this->service = $services[0]; return true; } protected function doAction() { // default values $data = [ 'period' => $this->getInput('period', 'yearly'), 'service' => $this->service, 'year' => $this->getInput('year', date('Y')), 'YEAR_LEFT_SHIFT' => self::YEAR_LEFT_SHIFT ]; switch ($data['period']) { case 'yearly': $from = date('Y') - self::YEAR_LEFT_SHIFT; $to = date('Y'); function get_time($year, $y) { return mktime(0, 0, 0, 1, 1, $y); } break; case 'monthly': $from = 1; $to = 12; function get_time($year, $m) { return mktime(0, 0, 0, $m, 1, $year); } break; case 'weekly': $from = 0; $to = 52; function get_time($year, $w) { $time = mktime(0, 0, 0, 1, 1, $year); $wd = date('w', $time); $wd = $wd == 0 ? 6 : $wd - 1; $beg = $time - $wd * SEC_PER_DAY; return strtotime("+$w week", $beg); } break; case 'daily': $from = 1; $to = DAY_IN_YEAR + date('L', mktime(0, 0, 0, 1, 1, $data['year'])); function get_time($year, $d) { return mktime(0, 0, 0, 1, $d, $year); } break; } $now = time(); $intervals = []; for ($t = $from; $t <= $to; $t++) { if (($start = get_time($data['year'], $t)) > $now) { break; } if (($end = get_time($data['year'], $t + 1)) > $now) { $end = $now; } $intervals[] = [ 'from' => $start, 'to' => $end ]; } $sla = API::Service()->getSla([ 'serviceids' => [$this->service['serviceid']], 'intervals' => $intervals ]); $data['sla'] = reset($sla); $response = new CControllerResponseData($data); $response->setTitle(_('Service availability report')); $this->setResponse($response); } }
💾 保存文件
← 返回文件管理器