✏️ 正在编辑: CTriggerManager.php
路径:
/usr/share/zabbix/include/classes/api/managers/CTriggerManager.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 to perform low level trigger related actions. */ class CTriggerManager { /** * Deletes triggers and related entities without permission check. * * @param array $triggerids */ public static function delete(array $triggerids) { $del_triggerids = []; // Selecting all inherited triggers. $parent_triggerids = array_flip($triggerids); do { $db_triggers = DBselect( 'SELECT t.triggerid'. ' FROM triggers t'. ' WHERE '.dbConditionInt('t.templateid', array_keys($parent_triggerids)) ); $del_triggerids += $parent_triggerids; $parent_triggerids = []; while ($db_trigger = DBfetch($db_triggers)) { if (!array_key_exists($db_trigger['triggerid'], $del_triggerids)) { $parent_triggerids[$db_trigger['triggerid']] = true; } } } while ($parent_triggerids); $del_triggerids = array_keys($del_triggerids); // Disable actions. $actionids = []; $conditionids = []; $db_actions = DBselect( 'SELECT ac.conditionid,ac.actionid'. ' FROM conditions ac'. ' WHERE ac.conditiontype='.CONDITION_TYPE_TRIGGER. ' AND '.dbConditionString('ac.value', $del_triggerids) ); while ($db_action = DBfetch($db_actions)) { $conditionids[] = $db_action['conditionid']; $actionids[$db_action['actionid']] = true; } if ($actionids) { DB::update('actions', [ 'values' => ['status' => ACTION_STATUS_DISABLED], 'where' => ['actionid' => array_keys($actionids)] ]); // Delete action conditions. DB::delete('conditions', ['conditionid' => $conditionids]); } // Update IT services. if (self::usedInItServices($del_triggerids)) { DB::update('services', [ 'values' => [ 'triggerid' => null, 'showsla' => SERVICE_SHOW_SLA_OFF ], 'where' => ['triggerid' => $del_triggerids] ]); updateItServices(); } // Remove trigger sysmap elements. $selement_triggerids = []; $selementids = []; $db_selement_triggers = DBselect( 'SELECT st.selement_triggerid,st.selementid'. ' FROM sysmap_element_trigger st'. ' WHERE '.dbConditionInt('st.triggerid', $del_triggerids) ); while ($db_selement_trigger = DBfetch($db_selement_triggers)) { $selement_triggerids[] = $db_selement_trigger['selement_triggerid']; $selementids[$db_selement_trigger['selementid']] = true; } if ($selement_triggerids) { DB::delete('sysmap_element_trigger', ['selement_triggerid' => $selement_triggerids]); // Remove map elements without triggers. $db_selement_triggers = DBselect( 'SELECT DISTINCT st.selementid'. ' FROM sysmap_element_trigger st'. ' WHERE '.dbConditionInt('st.selementid', array_keys($selementids)) ); while ($db_selement_trigger = DBfetch($db_selement_triggers)) { unset($selementids[$db_selement_trigger['selementid']]); } if ($selementids) { DB::delete('sysmaps_elements', ['selementid' => array_keys($selementids)]); } } // Remove related events. $ins_housekeeper = []; foreach ($del_triggerids as $del_triggerid) { $ins_housekeeper[] = [ 'tablename' => 'events', 'field' => 'triggerid', 'value' => $del_triggerid ]; } DB::insertBatch('housekeeper', $ins_housekeeper); DB::delete('trigger_discovery', ['triggerid' => $del_triggerids]); DB::delete('trigger_depends', ['triggerid_down' => $del_triggerids]); DB::delete('trigger_depends', ['triggerid_up' => $del_triggerids]); DB::delete('trigger_tag', ['triggerid' => $del_triggerids]); DB::delete('triggers', ['triggerid' => $del_triggerids]); } /** * Returns true if at least one of the given triggers is used in services. * * @param array $triggerids * * @return bool */ public static function usedInItServices(array $triggerids) { $db_services = DBselect('SELECT NULL FROM services WHERE '.dbConditionInt('triggerid', $triggerids), 1); return (bool) DBfetch($db_services); } }
💾 保存文件
← 返回文件管理器