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.
1918 lines
42 KiB
1918 lines
42 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.
|
||
|
**/
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Class that handles associations for zabbix elements unique fields and their database ids.
|
||
|
* The purpose is to gather all elements that need ids from database and resolve them with one query.
|
||
|
*/
|
||
|
class CImportReferencer {
|
||
|
|
||
|
/**
|
||
|
* @var array with references to interfaceid (hostid -> reference_name -> interfaceid)
|
||
|
*/
|
||
|
public $interfaces_cache = [];
|
||
|
|
||
|
protected $template_groups = [];
|
||
|
protected $host_groups = [];
|
||
|
protected $templates = [];
|
||
|
protected $hosts = [];
|
||
|
protected $items = [];
|
||
|
protected $valuemaps = [];
|
||
|
protected $triggers = [];
|
||
|
protected $graphs = [];
|
||
|
protected $iconmaps = [];
|
||
|
protected $images = [];
|
||
|
protected $maps = [];
|
||
|
protected $services = [];
|
||
|
protected $slas = [];
|
||
|
protected $users = [];
|
||
|
protected $actions = [];
|
||
|
protected $media_types = [];
|
||
|
protected $template_dashboards = [];
|
||
|
protected $template_macros = [];
|
||
|
protected $host_macros = [];
|
||
|
protected $host_prototype_macros = [];
|
||
|
protected $proxies = [];
|
||
|
protected $host_prototypes = [];
|
||
|
protected $httptests = [];
|
||
|
protected $httpsteps = [];
|
||
|
|
||
|
protected $db_template_groups;
|
||
|
protected $db_host_groups;
|
||
|
protected $db_templates;
|
||
|
protected $db_hosts;
|
||
|
protected $db_items;
|
||
|
protected $db_valuemaps;
|
||
|
protected $db_triggers;
|
||
|
protected $db_graphs;
|
||
|
protected $db_iconmaps;
|
||
|
protected $db_images;
|
||
|
protected $db_maps;
|
||
|
protected $db_services;
|
||
|
protected $db_slas;
|
||
|
protected $db_users;
|
||
|
protected $db_actions;
|
||
|
protected $db_media_types;
|
||
|
protected $db_template_dashboards;
|
||
|
protected $db_template_macros;
|
||
|
protected $db_host_macros;
|
||
|
protected $db_host_prototype_macros;
|
||
|
protected $db_proxies;
|
||
|
protected $db_host_prototypes;
|
||
|
protected $db_httptests;
|
||
|
protected $db_httpsteps;
|
||
|
|
||
|
/**
|
||
|
* Get template group ID by group UUID.
|
||
|
*
|
||
|
* @param string $uuid
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findTemplateGroupidByUuid(string $uuid): ?string {
|
||
|
if ($this->db_template_groups === null) {
|
||
|
$this->selectTemplateGroups();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_template_groups as $groupid => $group) {
|
||
|
if ($group['uuid'] === $uuid) {
|
||
|
return $groupid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get host group ID by group UUID.
|
||
|
*
|
||
|
* @param string $uuid
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findHostGroupidByUuid(string $uuid): ?string {
|
||
|
if ($this->db_host_groups === null) {
|
||
|
$this->selectHostGroups();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_host_groups as $groupid => $group) {
|
||
|
if ($group['uuid'] === $uuid) {
|
||
|
return $groupid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get template group ID by group name.
|
||
|
*
|
||
|
* @param string $name
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findTemplateGroupidByName(string $name): ?string {
|
||
|
if ($this->db_template_groups === null) {
|
||
|
$this->selectTemplateGroups();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_template_groups as $groupid => $group) {
|
||
|
if ($group['name'] === $name) {
|
||
|
return $groupid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get host group ID by group name.
|
||
|
*
|
||
|
* @param string $name
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findHostGroupidByName(string $name): ?string {
|
||
|
if ($this->db_host_groups === null) {
|
||
|
$this->selectHostGroups();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_host_groups as $groupid => $group) {
|
||
|
if ($group['name'] === $name) {
|
||
|
return $groupid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get template ID by group UUID.
|
||
|
*
|
||
|
* @param string $uuid
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findTemplateidByUuid(string $uuid): ?string {
|
||
|
if ($this->db_templates === null) {
|
||
|
$this->selectTemplates();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_templates as $templateid => $template) {
|
||
|
if ($template['uuid'] === $uuid) {
|
||
|
return $templateid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get template ID by template host.
|
||
|
*
|
||
|
* @param string $host
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findTemplateidByHost(string $host): ?string {
|
||
|
if ($this->db_templates === null) {
|
||
|
$this->selectTemplates();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_templates as $templateid => $template) {
|
||
|
if ($template['host'] === $host) {
|
||
|
return $templateid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get host ID by host.
|
||
|
*
|
||
|
* @param string $name
|
||
|
*
|
||
|
* @return string|bool
|
||
|
*/
|
||
|
public function findHostidByHost(string $name): ?string {
|
||
|
if ($this->db_hosts === null) {
|
||
|
$this->selectHosts();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_hosts as $hostid => $host) {
|
||
|
if ($host['host'] === $name) {
|
||
|
return $hostid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get host ID or template ID by host.
|
||
|
*
|
||
|
* @param string $host
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findTemplateidOrHostidByHost(string $host): ?string {
|
||
|
$templateid = $this->findTemplateidByHost($host);
|
||
|
|
||
|
if ($templateid !== null) {
|
||
|
return $templateid;
|
||
|
}
|
||
|
|
||
|
return $this->findHostidByHost($host);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get interface ID by host ID and interface reference.
|
||
|
*
|
||
|
* @param string $hostid
|
||
|
* @param string $interface_ref
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findInterfaceidByRef(string $hostid, string $interface_ref): ?string {
|
||
|
if (array_key_exists($hostid, $this->interfaces_cache)
|
||
|
&& array_key_exists($interface_ref, $this->interfaces_cache[$hostid])) {
|
||
|
return $this->interfaces_cache[$hostid][$interface_ref];
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Initializes references for items.
|
||
|
*/
|
||
|
public function initItemsReferences(): void {
|
||
|
if ($this->db_items === null) {
|
||
|
$this->selectItems();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get item ID by uuid.
|
||
|
*
|
||
|
* @param string $uuid
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findItemidByUuid(string $uuid): ?string {
|
||
|
if ($this->db_items === null) {
|
||
|
$this->selectItems();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_items as $itemid => $item) {
|
||
|
if ($item['uuid'] === $uuid) {
|
||
|
return $itemid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get item ID by host ID and item key_.
|
||
|
*
|
||
|
* @param string $hostid
|
||
|
* @param string $key
|
||
|
* @param bool $inherited
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findItemidByKey(string $hostid, string $key, bool $inherited = false): ?string {
|
||
|
if ($this->db_items === null) {
|
||
|
$this->selectItems();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_items as $itemid => $item) {
|
||
|
if ($item['hostid'] === $hostid && $item['key_'] === $key && ($inherited || $item['templateid'] == 0)) {
|
||
|
return $itemid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get valuemap ID by valuemap name.
|
||
|
*
|
||
|
* @param string $hostid
|
||
|
* @param string $name
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findValuemapidByName(string $hostid, string $name): ?string {
|
||
|
if ($this->db_valuemaps === null) {
|
||
|
$this->selectValuemaps();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_valuemaps as $valuemapid => $valuemap) {
|
||
|
if ($valuemap['hostid'] === $hostid && $valuemap['name'] === $name) {
|
||
|
return $valuemapid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get image ID by image name.
|
||
|
*
|
||
|
* @param string $name
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findImageidByName(string $name): ?string {
|
||
|
if ($this->db_images === null) {
|
||
|
$this->selectImages();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_images as $imageid => $image) {
|
||
|
if ($image['name'] === $name) {
|
||
|
return $imageid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get trigger by trigger ID.
|
||
|
*
|
||
|
* @param string $triggerid
|
||
|
*
|
||
|
* @return array|null
|
||
|
*/
|
||
|
public function findTriggerById(string $triggerid): ?array {
|
||
|
if ($this->db_triggers === null) {
|
||
|
$this->selectTriggers();
|
||
|
}
|
||
|
|
||
|
if (array_key_exists($triggerid, $this->db_triggers)) {
|
||
|
return $this->db_triggers[$triggerid];
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get trigger ID by trigger UUID.
|
||
|
*
|
||
|
* @param string $uuid
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findTriggeridByUuid(string $uuid): ?string {
|
||
|
if ($this->db_triggers === null) {
|
||
|
$this->selectTriggers();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_triggers as $triggerid => $trigger) {
|
||
|
if ($trigger['uuid'] === $uuid) {
|
||
|
return $triggerid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get trigger ID by trigger name and expressions.
|
||
|
*
|
||
|
* @param string $name
|
||
|
* @param string $expression
|
||
|
* @param string $recovery_expression
|
||
|
* @param bool $inherited
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findTriggeridByName(string $name, string $expression, string $recovery_expression,
|
||
|
bool $inherited = false): ?string {
|
||
|
if ($this->db_triggers === null) {
|
||
|
$this->selectTriggers();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_triggers as $triggerid => $trigger) {
|
||
|
if ($trigger['description'] === $name
|
||
|
&& $trigger['expression'] === $expression
|
||
|
&& $trigger['recovery_expression'] === $recovery_expression
|
||
|
&& ($inherited || $trigger['templateid'] == 0)) {
|
||
|
return $triggerid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get graph ID by UUID.
|
||
|
*
|
||
|
* @param string $uuid
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findGraphidByUuid(string $uuid): ?string {
|
||
|
if ($this->db_graphs === null) {
|
||
|
$this->selectGraphs();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_graphs as $graphid => $graph) {
|
||
|
if ($graph['uuid'] === $uuid) {
|
||
|
return $graphid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get graph ID by host ID and graph name.
|
||
|
*
|
||
|
* @param string $hostid
|
||
|
* @param string $name
|
||
|
* @param bool $inherited
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findGraphidByName(string $hostid, string $name, bool $inherited = false): ?string {
|
||
|
if ($this->db_graphs === null) {
|
||
|
$this->selectGraphs();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_graphs as $graphid => $graph) {
|
||
|
if ($graph['name'] === $name
|
||
|
&& in_array($hostid, $graph['hosts'])
|
||
|
&& ($inherited || $graph['templateid'] == 0)) {
|
||
|
return $graphid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get iconmap ID by name.
|
||
|
*
|
||
|
* @param string $name
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findIconmapidByName(string $name): ?string {
|
||
|
if ($this->db_iconmaps === null) {
|
||
|
$this->selectIconmaps();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_iconmaps as $iconmapid => $iconmap) {
|
||
|
if ($iconmap['name'] === $name) {
|
||
|
return $iconmapid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get map ID by name.
|
||
|
*
|
||
|
* @param string $name
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findMapidByName(string $name): ?string {
|
||
|
if ($this->db_maps === null) {
|
||
|
$this->selectMaps();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_maps as $mapid => $map) {
|
||
|
if ($map['name'] === $name) {
|
||
|
return $mapid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get service ID by name.
|
||
|
*
|
||
|
* @param string $name
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findServiceidByName(string $name): ?string {
|
||
|
if ($this->db_services === null) {
|
||
|
$this->selectServices();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_services as $serviceid => $service) {
|
||
|
if ($service['name'] === $name) {
|
||
|
return $serviceid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get action ID by name.
|
||
|
*
|
||
|
* @param string $name
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findSlaidByName(string $name): ?string {
|
||
|
if ($this->db_slas === null) {
|
||
|
$this->selectSlas();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_slas as $slaid => $sla) {
|
||
|
if ($sla['name'] === $name) {
|
||
|
return $slaid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get user ID by username.
|
||
|
*
|
||
|
* @param string $username
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findUseridByUsername(string $username): ?string {
|
||
|
if ($this->db_users === null) {
|
||
|
$this->selectUsers();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_users as $userid => $user) {
|
||
|
if ($user['username'] === $username) {
|
||
|
return $userid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get action ID by name.
|
||
|
*
|
||
|
* @param string $name
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findActionidByName(string $name): ?string {
|
||
|
if ($this->db_actions === null) {
|
||
|
$this->selectActions();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_actions as $actionid => $action) {
|
||
|
if ($action['name'] === $name) {
|
||
|
return $actionid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get media type ID by name.
|
||
|
*
|
||
|
* @param string $name
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findMediaTypeidByName(string $name): ?string {
|
||
|
if ($this->db_media_types === null) {
|
||
|
$this->selectMediaTypes();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_media_types as $mediatypeid => $media_type) {
|
||
|
if ($media_type['name'] === $name) {
|
||
|
return $mediatypeid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get template dashboard ID by dashboard UUID.
|
||
|
*
|
||
|
* @param string $uuid
|
||
|
*
|
||
|
* @return string|null
|
||
|
*
|
||
|
* @throws APIException
|
||
|
*/
|
||
|
public function findTemplateDashboardidByUuid(string $uuid): ?string {
|
||
|
if ($this->db_template_dashboards === null) {
|
||
|
$this->selectTemplateDashboards();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_template_dashboards as $dashboardid => $dashboard) {
|
||
|
if ($dashboard['uuid'] === $uuid) {
|
||
|
return $dashboardid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get template dashboard ID by dashboard name and template ID.
|
||
|
*
|
||
|
* @param string $name
|
||
|
* @param int $templateid
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findTemplateDashboardidByNameAndId(string $name, int $templateid): ?string {
|
||
|
if ($this->db_template_dashboards === null) {
|
||
|
$this->selectTemplateDashboards();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_template_dashboards as $dashboardid => $dashboard) {
|
||
|
if ($dashboard['name'] === $name && $dashboard['templateid'] == $templateid) {
|
||
|
return $dashboardid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get macro ID by template ID and macro name.
|
||
|
*
|
||
|
* @param string $templateid
|
||
|
* @param string $macro
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findTemplateMacroid(string $templateid, string $macro): ?string {
|
||
|
if ($this->db_template_macros === null) {
|
||
|
$this->selectTemplateMacros();
|
||
|
}
|
||
|
|
||
|
return (array_key_exists($templateid, $this->db_template_macros)
|
||
|
&& array_key_exists($macro, $this->db_template_macros[$templateid]))
|
||
|
? $this->db_template_macros[$templateid][$macro]
|
||
|
: null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get macro ID by host ID and macro name.
|
||
|
*
|
||
|
* @param string $hostid
|
||
|
* @param string $macro
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findHostMacroid(string $hostid, string $macro): ?string {
|
||
|
if ($this->db_host_macros === null) {
|
||
|
$this->selectHostMacros();
|
||
|
}
|
||
|
|
||
|
return (array_key_exists($hostid, $this->db_host_macros)
|
||
|
&& array_key_exists($macro, $this->db_host_macros[$hostid]))
|
||
|
? $this->db_host_macros[$hostid][$macro]
|
||
|
: null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get macro ID by host prototype ID and macro name.
|
||
|
*
|
||
|
* @param string $hostid
|
||
|
* @param string $macro
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findHostPrototypeMacroid(string $hostid, string $macro): ?string {
|
||
|
if ($this->db_host_prototype_macros === null) {
|
||
|
$this->selectHostPrototypeMacros();
|
||
|
}
|
||
|
|
||
|
return (array_key_exists($hostid, $this->db_host_prototype_macros)
|
||
|
&& array_key_exists($macro, $this->db_host_prototype_macros[$hostid]))
|
||
|
? $this->db_host_prototype_macros[$hostid][$macro]
|
||
|
: null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get proxy ID by name.
|
||
|
*
|
||
|
* @param string $name
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findProxyidByName(string $name): ?string {
|
||
|
if ($this->db_proxies === null) {
|
||
|
$this->selectProxies();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_proxies as $proxyid => $proxy) {
|
||
|
if ($proxy['name'] === $name) {
|
||
|
return $proxyid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get host prototype ID by UUID.
|
||
|
*
|
||
|
* @param string $uuid
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findHostPrototypeidByUuid(string $uuid): ?string {
|
||
|
if ($this->db_host_prototypes === null) {
|
||
|
$this->selectHostPrototypes();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_host_prototypes as $host_prototypeid => $host_prototype) {
|
||
|
if ($host_prototype['uuid'] === $uuid) {
|
||
|
return $host_prototypeid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get host prototype ID by host.
|
||
|
*
|
||
|
* @param string $parent_hostid
|
||
|
* @param string $discovery_ruleid
|
||
|
* @param string $host
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findHostPrototypeidByHost(string $parent_hostid, string $discovery_ruleid, string $host): ?string {
|
||
|
if ($this->db_host_prototypes === null) {
|
||
|
$this->selectHostPrototypes();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_host_prototypes as $host_prototypeid => $host_prototype) {
|
||
|
if ($host_prototype['parent_hostid'] === $parent_hostid
|
||
|
&& $host_prototype['discovery_ruleid'] === $discovery_ruleid
|
||
|
&& $host_prototype['host'] === $host) {
|
||
|
return $host_prototypeid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get httptest ID by web scenario UUID.
|
||
|
*
|
||
|
* @param string $uuid
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findHttpTestidByUuid(string $uuid): ?string {
|
||
|
if ($this->db_httptests === null) {
|
||
|
$this->selectHttpTests();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_httptests as $httptestid => $httptest) {
|
||
|
if ($httptest['uuid'] === $uuid) {
|
||
|
return $httptestid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get httptest ID by hostid and web scenario name.
|
||
|
*
|
||
|
* @param string $hostid
|
||
|
* @param string $name
|
||
|
*
|
||
|
* @return string|bool
|
||
|
*/
|
||
|
public function findHttpTestidByName(string $hostid, string $name): ?string {
|
||
|
if ($this->db_httptests === null) {
|
||
|
$this->selectHttpTests();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_httptests as $httptestid => $httptest) {
|
||
|
if ($httptest['hostid'] === $hostid && $httptest['name'] === $name) {
|
||
|
return $httptestid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get httpstep ID by hostid, httptestid and web scenario step name.
|
||
|
*
|
||
|
* @param string $hostid
|
||
|
* @param string $httptestid
|
||
|
* @param string $name
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function findHttpStepidByName(string $hostid, string $httptestid, string $name): ?string {
|
||
|
if ($this->db_httpsteps === null) {
|
||
|
$this->selectHttpSteps();
|
||
|
}
|
||
|
|
||
|
foreach ($this->db_httpsteps as $httpstepid => $httpstep) {
|
||
|
if ($httpstep['hostid'] === $hostid && $httpstep['name'] === $name
|
||
|
&& $httpstep['httptestid'] === $httptestid) {
|
||
|
return $httpstepid;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add template group names that need association with a database group ID.
|
||
|
*
|
||
|
* @param array $groups
|
||
|
*/
|
||
|
public function addTemplateGroups(array $groups): void {
|
||
|
$this->template_groups = $groups;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add host group names that need association with a database group ID.
|
||
|
*
|
||
|
* @param array $groups
|
||
|
*/
|
||
|
public function addHostGroups(array $groups): void {
|
||
|
$this->host_groups = $groups;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add template group name association with group ID.
|
||
|
*
|
||
|
* @param string $groupid
|
||
|
* @param array $group
|
||
|
*/
|
||
|
public function setDbTemplateGroup(string $groupid, array $group): void {
|
||
|
$this->db_template_groups[$groupid] = [
|
||
|
'uuid' => $group['uuid'],
|
||
|
'name' => $group['name']
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add host group name association with group ID.
|
||
|
*
|
||
|
* @param string $groupid
|
||
|
* @param array $group
|
||
|
*/
|
||
|
public function setDbHostGroup(string $groupid, array $group): void {
|
||
|
$this->db_host_groups[$groupid] = [
|
||
|
'uuid' => $group['uuid'],
|
||
|
'name' => $group['name']
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add templates names that need association with a database template ID.
|
||
|
*
|
||
|
* @param array $templates
|
||
|
*/
|
||
|
public function addTemplates(array $templates): void {
|
||
|
$this->templates = $templates;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add template name association with template ID.
|
||
|
*
|
||
|
* @param string $templateid
|
||
|
* @param array $template
|
||
|
*/
|
||
|
public function setDbTemplate(string $templateid, array $template): void {
|
||
|
$this->db_templates[$templateid] = [
|
||
|
'uuid' => $template['uuid'],
|
||
|
'host' => $template['host']
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add hosts names that need association with a database host ID.
|
||
|
*
|
||
|
* @param array $hosts
|
||
|
*/
|
||
|
public function addHosts(array $hosts): void {
|
||
|
$this->hosts = $hosts;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add host name association with host ID.
|
||
|
*
|
||
|
* @param string $hostid
|
||
|
* @param array $host
|
||
|
*/
|
||
|
public function setDbHost(string $hostid, array $host): void {
|
||
|
$this->db_hosts[$hostid] = [
|
||
|
'host' => $host['host']
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add item keys that need association with a database item ID.
|
||
|
*
|
||
|
* @param array $items
|
||
|
*/
|
||
|
public function addItems(array $items): void {
|
||
|
$this->items = $items;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add item key association with item ID.
|
||
|
*
|
||
|
* @param string $itemid
|
||
|
* @param array $item
|
||
|
*/
|
||
|
public function setDbItem(string $itemid, array $item): void {
|
||
|
$this->db_items[$itemid] = [
|
||
|
'hostid' => $item['hostid'],
|
||
|
'uuid' => array_key_exists('uuid', $item) ? $item['uuid'] : '',
|
||
|
'key_' => $item['key_'],
|
||
|
'templateid' => 0
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add value map names that need association with a database value map ID.
|
||
|
*
|
||
|
* @param array $valuemaps
|
||
|
*/
|
||
|
public function addValuemaps(array $valuemaps): void {
|
||
|
$this->valuemaps = $valuemaps;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add trigger description/expression/recovery_expression that need association with a database trigger ID.
|
||
|
*
|
||
|
* @param array $triggers
|
||
|
*/
|
||
|
public function addTriggers(array $triggers): void {
|
||
|
$this->triggers = $triggers;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add graph names that need association with a database graph ID.
|
||
|
*
|
||
|
* @param array $graphs
|
||
|
*/
|
||
|
public function addGraphs(array $graphs): void {
|
||
|
$this->graphs = $graphs;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add trigger name/expression association with trigger ID.
|
||
|
*
|
||
|
* @param string $triggerid
|
||
|
* @param array $trigger
|
||
|
*/
|
||
|
public function setDbTrigger(string $triggerid, array $trigger): void {
|
||
|
$this->db_triggers[$triggerid] = [
|
||
|
'uuid' => array_key_exists('uuid', $trigger) ? $trigger['uuid'] : '',
|
||
|
'description' => $trigger['description'],
|
||
|
'expression' => $trigger['expression'],
|
||
|
'recovery_expression' => $trigger['recovery_expression'],
|
||
|
'templateid' => 0
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add icon map names that need association with a database icon map ID.
|
||
|
*
|
||
|
* @param array $iconmaps
|
||
|
*/
|
||
|
public function addIconmaps(array $iconmaps): void {
|
||
|
$this->iconmaps = $iconmaps;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add icon map names that need association with a database icon map ID.
|
||
|
*
|
||
|
* @param array $images
|
||
|
*/
|
||
|
public function addImages(array $images): void {
|
||
|
$this->images = $images;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add image name association with image ID.
|
||
|
*
|
||
|
* @param string $imageid
|
||
|
* @param array $image
|
||
|
*/
|
||
|
public function setDbImage(string $imageid, array $image): void {
|
||
|
$this->db_images[$imageid] = [
|
||
|
'name' => $image['name']
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add map names that need association with a database map ID.
|
||
|
*
|
||
|
* @param array $maps
|
||
|
*/
|
||
|
public function addMaps(array $maps) {
|
||
|
$this->maps = $maps;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add map name association with map ID.
|
||
|
*
|
||
|
* @param string $mapid
|
||
|
* @param array $map
|
||
|
*/
|
||
|
public function setDbMap(string $mapid, array $map): void {
|
||
|
$this->db_maps[$mapid] =[
|
||
|
'name' => $map['name']
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add service names that need association with a database service ID.
|
||
|
*
|
||
|
* @param array $services
|
||
|
*/
|
||
|
public function addServices(array $services) {
|
||
|
$this->services = $services;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add sla names that need association with a database sla ID.
|
||
|
*
|
||
|
* @param array $slas
|
||
|
*/
|
||
|
public function addSlas(array $slas) {
|
||
|
$this->slas = $slas;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add user usernames that need association with a database user ID.
|
||
|
*
|
||
|
* @param array $users
|
||
|
*/
|
||
|
public function addUsers(array $users) {
|
||
|
$this->users = $users;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add action names that need association with a database action ID.
|
||
|
*
|
||
|
* @param array $actions
|
||
|
*/
|
||
|
public function addActions(array $actions) {
|
||
|
$this->actions = $actions;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add media type names that need association with a database media type ID.
|
||
|
*
|
||
|
* @param array $media_types
|
||
|
*/
|
||
|
public function addMediaTypes(array $media_types) {
|
||
|
$this->media_types = $media_types;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add templated dashboard names that need association with a database dashboard ID.
|
||
|
*
|
||
|
* @param array $dashboards
|
||
|
*/
|
||
|
public function addTemplateDashboards(array $dashboards): void {
|
||
|
$this->template_dashboards = $dashboards;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add user macro names that need association with a database macro ID.
|
||
|
*
|
||
|
* @param array $macros[<template uuid>] An array of macros by template UUID.
|
||
|
*/
|
||
|
public function addTemplateMacros(array $macros): void {
|
||
|
$this->template_macros = $macros;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add user macro names that need association with a database macro ID.
|
||
|
*
|
||
|
* @param array $macros[<host name>] An array of macros by host technical name.
|
||
|
*/
|
||
|
public function addHostMacros(array $macros): void {
|
||
|
$this->host_macros = $macros;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add user macro names that need association with a database macro ID.
|
||
|
*
|
||
|
* @param array $macros[<host name>] An array of macros by host technical name.
|
||
|
*/
|
||
|
public function addHostPrototypeMacros(array $macros): void {
|
||
|
$this->host_prototype_macros = $macros;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add proxy names that need association with a database proxy ID.
|
||
|
*
|
||
|
* @param array $proxies
|
||
|
*/
|
||
|
public function addProxies(array $proxies): void {
|
||
|
$this->proxies = $proxies;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add host prototypes that need association with a database host prototype ID.
|
||
|
*
|
||
|
* @param array $hostPrototypes
|
||
|
*/
|
||
|
public function addHostPrototypes(array $hostPrototypes): void {
|
||
|
$this->host_prototypes = $hostPrototypes;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add web scenario names that need association with a database httptest ID.
|
||
|
*
|
||
|
* @param array $httptests
|
||
|
*/
|
||
|
public function addHttpTests(array $httptests): void {
|
||
|
$this->httptests = $httptests;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add web scenario step names that need association with a database httpstep ID.
|
||
|
*
|
||
|
* @param array $httpsteps
|
||
|
*/
|
||
|
public function addHttpSteps(array $httpsteps): void {
|
||
|
$this->httpsteps = $httpsteps;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select template group ids for previously added group names.
|
||
|
*/
|
||
|
protected function selectTemplateGroups(): void {
|
||
|
$this->db_template_groups = [];
|
||
|
|
||
|
if (!$this->template_groups) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$this->db_template_groups = API::TemplateGroup()->get([
|
||
|
'output' => ['name', 'uuid'],
|
||
|
'filter' => [
|
||
|
'uuid' => array_column($this->template_groups, 'uuid'),
|
||
|
'name' => array_keys($this->template_groups)
|
||
|
],
|
||
|
'searchByAny' => true,
|
||
|
'preservekeys' => true
|
||
|
]);
|
||
|
|
||
|
$this->template_groups = [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select host group ids for previously added group names.
|
||
|
*/
|
||
|
protected function selectHostGroups(): void {
|
||
|
$this->db_host_groups = [];
|
||
|
|
||
|
if (!$this->host_groups) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$this->db_host_groups = API::HostGroup()->get([
|
||
|
'output' => ['name', 'uuid'],
|
||
|
'filter' => [
|
||
|
'uuid' => array_column($this->host_groups, 'uuid'),
|
||
|
'name' => array_keys($this->host_groups)
|
||
|
],
|
||
|
'searchByAny' => true,
|
||
|
'preservekeys' => true
|
||
|
]);
|
||
|
|
||
|
$this->host_groups = [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select template ids for previously added template names.
|
||
|
*/
|
||
|
protected function selectTemplates(): void {
|
||
|
$this->db_templates = [];
|
||
|
|
||
|
if (!$this->templates) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$this->db_templates = API::Template()->get([
|
||
|
'output' => ['host', 'uuid'],
|
||
|
'filter' => [
|
||
|
'uuid' => array_column($this->templates, 'uuid'),
|
||
|
'host' => array_keys($this->templates)
|
||
|
],
|
||
|
'searchByAny' => true,
|
||
|
'editable' => true,
|
||
|
'preservekeys' => true
|
||
|
]);
|
||
|
|
||
|
$this->templates = [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select host ids for previously added host names.
|
||
|
*/
|
||
|
protected function selectHosts(): void {
|
||
|
$this->db_hosts = [];
|
||
|
|
||
|
if (!$this->hosts) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Fetch only normal hosts, discovered hosts must not be imported.
|
||
|
$this->db_hosts = API::Host()->get([
|
||
|
'output' => ['host'],
|
||
|
'filter' => ['host' => array_keys($this->hosts)],
|
||
|
'templated_hosts' => true,
|
||
|
'preservekeys' => true
|
||
|
]);
|
||
|
|
||
|
$this->hosts = [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select item ids for previously added item keys.
|
||
|
*/
|
||
|
protected function selectItems(): void {
|
||
|
$this->db_items = [];
|
||
|
|
||
|
if (!$this->items) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$sql_where = [];
|
||
|
|
||
|
foreach ($this->items as $host => $items) {
|
||
|
$hostid = $this->findTemplateidOrHostidByHost($host);
|
||
|
|
||
|
if ($hostid !== null) {
|
||
|
$sql_where[] = '(i.hostid='.zbx_dbstr($hostid)
|
||
|
.' AND ('
|
||
|
.dbConditionString('i.key_', array_keys($items))
|
||
|
.' OR '.dbConditionString('i.uuid', array_column($items, 'uuid'))
|
||
|
.'))';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ($sql_where) {
|
||
|
$db_items = DBselect(
|
||
|
'SELECT i.itemid,i.hostid,i.key_,i.uuid,i.templateid FROM items i WHERE '.implode(' OR ', $sql_where)
|
||
|
);
|
||
|
|
||
|
while ($db_item = DBfetch($db_items)) {
|
||
|
$this->db_items[$db_item['itemid']] = [
|
||
|
'uuid' => $db_item['uuid'],
|
||
|
'key_' => $db_item['key_'],
|
||
|
'hostid' => $db_item['hostid'],
|
||
|
'templateid' => $db_item['templateid']
|
||
|
];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Unset item refs to make referencer select them from db again.
|
||
|
*/
|
||
|
public function refreshItems(): void {
|
||
|
$this->db_items = null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select value map IDs for previously added value map names.
|
||
|
*/
|
||
|
protected function selectValuemaps(): void {
|
||
|
$this->db_valuemaps = [];
|
||
|
|
||
|
if (!$this->valuemaps) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$sql_where = [];
|
||
|
|
||
|
foreach ($this->valuemaps as $host => $valuemap_names) {
|
||
|
$hostid = $this->findTemplateidOrHostidByHost($host);
|
||
|
|
||
|
if ($hostid !== null) {
|
||
|
$sql_where[] = '(vm.hostid='.zbx_dbstr($hostid).' AND '.
|
||
|
dbConditionString('vm.name', array_keys($valuemap_names)).')';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ($sql_where) {
|
||
|
$db_valuemaps = DBselect(
|
||
|
'SELECT vm.valuemapid,vm.hostid,vm.name'.
|
||
|
' FROM valuemap vm'.
|
||
|
' WHERE '.implode(' OR ', $sql_where)
|
||
|
);
|
||
|
|
||
|
while ($valuemap = DBfetch($db_valuemaps)) {
|
||
|
$this->db_valuemaps[$valuemap['valuemapid']] = [
|
||
|
'name' => $valuemap['name'],
|
||
|
'hostid' => $valuemap['hostid']
|
||
|
];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$this->valuemaps = [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select trigger ids for previously added trigger names/expressions.
|
||
|
*/
|
||
|
protected function selectTriggers(): void {
|
||
|
$this->db_triggers = [];
|
||
|
|
||
|
if (!$this->triggers) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$uuids = [];
|
||
|
|
||
|
foreach ($this->triggers as $trigger) {
|
||
|
foreach ($trigger as $expression) {
|
||
|
$uuids += array_flip(array_column($expression, 'uuid'));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$db_triggers = $uuids
|
||
|
? API::Trigger()->get([
|
||
|
'output' => ['uuid', 'description', 'expression', 'recovery_expression', 'templateid'],
|
||
|
'filter' => [
|
||
|
'uuid' => array_keys($uuids),
|
||
|
'flags' => [
|
||
|
ZBX_FLAG_DISCOVERY_NORMAL,
|
||
|
ZBX_FLAG_DISCOVERY_PROTOTYPE,
|
||
|
ZBX_FLAG_DISCOVERY_CREATED
|
||
|
]
|
||
|
],
|
||
|
'preservekeys' => true
|
||
|
])
|
||
|
: [];
|
||
|
|
||
|
$db_triggers += API::Trigger()->get([
|
||
|
'output' => ['uuid', 'description', 'expression', 'recovery_expression', 'templateid'],
|
||
|
'filter' => [
|
||
|
'description' => array_keys($this->triggers),
|
||
|
'flags' => [
|
||
|
ZBX_FLAG_DISCOVERY_NORMAL,
|
||
|
ZBX_FLAG_DISCOVERY_PROTOTYPE,
|
||
|
ZBX_FLAG_DISCOVERY_CREATED
|
||
|
]
|
||
|
],
|
||
|
'preservekeys' => true
|
||
|
]);
|
||
|
|
||
|
if (!$db_triggers) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$db_triggers = CMacrosResolverHelper::resolveTriggerExpressions($db_triggers,
|
||
|
['sources' => ['expression', 'recovery_expression']]
|
||
|
);
|
||
|
|
||
|
foreach ($db_triggers as $db_trigger) {
|
||
|
$uuid = $db_trigger['uuid'];
|
||
|
$description = $db_trigger['description'];
|
||
|
$expression = $db_trigger['expression'];
|
||
|
$recovery_expression = $db_trigger['recovery_expression'];
|
||
|
|
||
|
if (array_key_exists($uuid, $uuids)
|
||
|
|| (array_key_exists($description, $this->triggers)
|
||
|
&& array_key_exists($expression, $this->triggers[$description])
|
||
|
&& array_key_exists($recovery_expression, $this->triggers[$description][$expression]))) {
|
||
|
$this->db_triggers[$db_trigger['triggerid']] = $db_trigger;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Unset trigger refs to make referencer select them from db again.
|
||
|
*/
|
||
|
public function refreshTriggers(): void {
|
||
|
$this->db_triggers = null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select graph IDs for previously added graph names.
|
||
|
*/
|
||
|
protected function selectGraphs(): void {
|
||
|
$this->db_graphs = [];
|
||
|
|
||
|
if (!$this->graphs) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$graph_uuids = [];
|
||
|
$graph_names = [];
|
||
|
|
||
|
foreach ($this->graphs as $graph) {
|
||
|
$graph_uuids += array_flip(array_column($graph, 'uuid'));
|
||
|
$graph_names += array_flip(array_keys($graph));
|
||
|
}
|
||
|
|
||
|
$db_graphs = API::Graph()->get([
|
||
|
'output' => ['uuid', 'name', 'templateid'],
|
||
|
'selectHosts' => ['hostid'],
|
||
|
'filter' => [
|
||
|
'uuid' => array_keys($graph_uuids),
|
||
|
'flags' => null
|
||
|
],
|
||
|
'preservekeys' => true
|
||
|
]);
|
||
|
|
||
|
$db_graphs += API::Graph()->get([
|
||
|
'output' => ['uuid', 'name', 'templateid'],
|
||
|
'selectHosts' => ['hostid'],
|
||
|
'filter' => [
|
||
|
'name' => array_keys($graph_names),
|
||
|
'flags' => null
|
||
|
],
|
||
|
'preservekeys' => true
|
||
|
]);
|
||
|
|
||
|
foreach ($db_graphs as $graph) {
|
||
|
$graph['hosts'] = array_column($graph['hosts'], 'hostid');
|
||
|
$this->db_graphs[$graph['graphid']] = $graph;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Unset graph refs to make referencer select them from DB again.
|
||
|
*/
|
||
|
public function refreshGraphs(): void {
|
||
|
$this->db_graphs = null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select icon map ids for previously added icon maps names.
|
||
|
*/
|
||
|
protected function selectIconmaps(): void {
|
||
|
$this->db_iconmaps = [];
|
||
|
|
||
|
if (!$this->iconmaps) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$db_iconmaps = API::IconMap()->get([
|
||
|
'filter' => ['name' => array_keys($this->iconmaps)],
|
||
|
'output' => ['name'],
|
||
|
'preservekeys' => true
|
||
|
]);
|
||
|
|
||
|
foreach ($db_iconmaps as $iconmapid => $iconmap) {
|
||
|
$this->db_iconmaps[$iconmapid] = $iconmap;
|
||
|
}
|
||
|
|
||
|
$this->iconmaps = [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select icon map ids for previously added icon maps names.
|
||
|
*/
|
||
|
protected function selectImages(): void {
|
||
|
$this->db_images = [];
|
||
|
|
||
|
if (!$this->images) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$db_images = API::Image()->get([
|
||
|
'output' => ['name'],
|
||
|
'filter' => ['name' => array_keys($this->images)],
|
||
|
'preservekeys' => true
|
||
|
]);
|
||
|
|
||
|
foreach ($db_images as $imageid => $image) {
|
||
|
$this->db_images[$imageid] = $image;
|
||
|
}
|
||
|
|
||
|
$this->images = [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select map ids for previously added maps names.
|
||
|
*/
|
||
|
protected function selectMaps(): void {
|
||
|
$this->db_maps = [];
|
||
|
|
||
|
if (!$this->maps) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$db_maps = API::Map()->get([
|
||
|
'output' => ['name'],
|
||
|
'filter' => ['name' => array_keys($this->maps)],
|
||
|
'preservekeys' => true
|
||
|
]);
|
||
|
|
||
|
foreach ($db_maps as $mapid => $map) {
|
||
|
$this->db_maps[$mapid] = $map;
|
||
|
}
|
||
|
|
||
|
$this->maps = [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select service ids for previously added names.
|
||
|
*/
|
||
|
protected function selectServices(): void {
|
||
|
$this->db_services = [];
|
||
|
|
||
|
if (!$this->services) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$this->db_services = API::Service()->get([
|
||
|
'output' => ['name'],
|
||
|
'filter' => ['name' => array_keys($this->services)],
|
||
|
'preservekeys' => true
|
||
|
]);
|
||
|
|
||
|
$this->services = [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select sla ids for previously added names.
|
||
|
*/
|
||
|
protected function selectSlas(): void {
|
||
|
$this->db_slas = [];
|
||
|
|
||
|
if (!$this->slas) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$this->db_slas = API::Sla()->get([
|
||
|
'output' => ['name'],
|
||
|
'filter' => ['name' => array_keys($this->slas)],
|
||
|
'preservekeys' => true
|
||
|
]);
|
||
|
|
||
|
$this->slas = [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select user ids for previously added usernames.
|
||
|
*/
|
||
|
protected function selectUsers(): void {
|
||
|
$this->db_users = [];
|
||
|
|
||
|
if (!$this->users) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$this->db_users = API::User()->get([
|
||
|
'output' => ['username'],
|
||
|
'filter' => ['username' => array_keys($this->users)],
|
||
|
'preservekeys' => true
|
||
|
]);
|
||
|
|
||
|
$this->users = [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select action ids for previously added names.
|
||
|
*/
|
||
|
protected function selectActions(): void {
|
||
|
$this->db_actions = [];
|
||
|
|
||
|
if (!$this->actions) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$this->db_actions = API::Action()->get([
|
||
|
'output' => ['name'],
|
||
|
'filter' => ['name' => array_keys($this->actions)],
|
||
|
'preservekeys' => true
|
||
|
]);
|
||
|
|
||
|
$this->actions = [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select media type ids for previously added names.
|
||
|
*/
|
||
|
protected function selectMediaTypes(): void {
|
||
|
$this->db_media_types = [];
|
||
|
|
||
|
if (!$this->media_types) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$this->db_media_types = API::MediaType()->get([
|
||
|
'output' => ['name'],
|
||
|
'filter' => ['name' => array_keys($this->media_types)],
|
||
|
'preservekeys' => true
|
||
|
]);
|
||
|
|
||
|
$this->media_types = [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select template dashboard IDs for previously added dashboard names and template IDs.
|
||
|
*
|
||
|
* @throws APIException
|
||
|
*/
|
||
|
protected function selectTemplateDashboards(): void {
|
||
|
$this->db_template_dashboards = [];
|
||
|
|
||
|
if (!$this->template_dashboards) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$this->db_template_dashboards = API::TemplateDashboard()->get([
|
||
|
'output' => ['uuid', 'name', 'templateid'],
|
||
|
'filter' => [
|
||
|
'uuid' => array_keys($this->template_dashboards),
|
||
|
'name' => array_unique(array_column($this->template_dashboards, 'name'))
|
||
|
],
|
||
|
'searchByAny' => true,
|
||
|
'preservekeys' => true
|
||
|
]);
|
||
|
|
||
|
$this->template_dashboards = [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select user macro ids for previously added macro names.
|
||
|
*/
|
||
|
protected function selectTemplateMacros(): void {
|
||
|
$this->db_template_macros = [];
|
||
|
|
||
|
$sql_where = [];
|
||
|
|
||
|
foreach ($this->template_macros as $uuid => $macros) {
|
||
|
$sql_where[] = '(h.uuid='.zbx_dbstr($uuid).' AND '.dbConditionString('hm.macro', $macros).')';
|
||
|
}
|
||
|
|
||
|
if ($sql_where) {
|
||
|
$db_macros = DBselect(
|
||
|
'SELECT hm.hostmacroid,hm.hostid,hm.macro'.
|
||
|
' FROM hostmacro hm'.
|
||
|
' JOIN hosts h on hm.hostid=h.hostid'.
|
||
|
' WHERE '.implode(' OR ', $sql_where)
|
||
|
);
|
||
|
|
||
|
while ($db_macro = DBfetch($db_macros)) {
|
||
|
$this->db_template_macros[$db_macro['hostid']][$db_macro['macro']] = $db_macro['hostmacroid'];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$this->template_macros = [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select user macro ids for previously added macro names.
|
||
|
*/
|
||
|
protected function selectHostMacros(): void {
|
||
|
$this->db_host_macros = [];
|
||
|
|
||
|
$sql_where = [];
|
||
|
|
||
|
foreach ($this->host_macros as $host => $macros) {
|
||
|
$sql_where[] = '(h.host='.zbx_dbstr($host).' AND '.dbConditionString('hm.macro', $macros).')';
|
||
|
}
|
||
|
|
||
|
if ($sql_where) {
|
||
|
$db_macros = DBselect(
|
||
|
'SELECT hm.hostmacroid,hm.hostid,hm.macro'.
|
||
|
' FROM hostmacro hm'.
|
||
|
' JOIN hosts h on hm.hostid=h.hostid'.
|
||
|
' WHERE '.implode(' OR ', $sql_where)
|
||
|
);
|
||
|
|
||
|
while ($db_macro = DBfetch($db_macros)) {
|
||
|
$this->db_host_macros[$db_macro['hostid']][$db_macro['macro']] = $db_macro['hostmacroid'];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$this->host_macros = [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select user macro ids for previously added macro names.
|
||
|
*/
|
||
|
protected function selectHostPrototypeMacros(): void {
|
||
|
$this->db_host_prototype_macros = [];
|
||
|
|
||
|
$sql_where = [];
|
||
|
|
||
|
foreach ($this->host_prototype_macros as $type => $hosts) {
|
||
|
foreach ($hosts as $host => $discovery_rules) {
|
||
|
foreach ($discovery_rules as $discovery_rule_key => $host_prototypes) {
|
||
|
foreach ($host_prototypes as $host_prototype_id => $macros) {
|
||
|
$sql_where[] = '('.
|
||
|
'h.host='.zbx_dbstr($host).
|
||
|
' AND dr.key_='.zbx_dbstr($discovery_rule_key).
|
||
|
' AND hp.'.($type === 'uuid' ? 'uuid' : 'host').'='.zbx_dbstr($host_prototype_id).
|
||
|
' AND '.dbConditionString('hm.macro', $macros).
|
||
|
')';
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ($sql_where) {
|
||
|
$db_macros = DBselect(
|
||
|
'SELECT hm.hostmacroid,hm.hostid,hm.macro'.
|
||
|
' FROM hostmacro hm'.
|
||
|
' JOIN hosts hp on hm.hostid=hp.hostid'.
|
||
|
' JOIN host_discovery hd on hp.hostid=hd.hostid'.
|
||
|
' JOIN items dr on hd.parent_itemid=dr.itemid'.
|
||
|
' JOIN hosts h on dr.hostid=h.hostid'.
|
||
|
' WHERE '.implode(' OR ', $sql_where)
|
||
|
);
|
||
|
|
||
|
while ($db_macro = DBfetch($db_macros)) {
|
||
|
$this->db_host_prototype_macros[$db_macro['hostid']][$db_macro['macro']] = $db_macro['hostmacroid'];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$this->host_prototype_macros = [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select proxy ids for previously added proxy names.
|
||
|
*/
|
||
|
protected function selectProxies(): void {
|
||
|
$this->db_proxies = [];
|
||
|
|
||
|
if (!$this->proxies) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$this->db_proxies = API::Proxy()->get([
|
||
|
'output' => ['name'],
|
||
|
'filter' => ['name' => array_keys($this->proxies)],
|
||
|
'preservekeys' => true
|
||
|
]);
|
||
|
|
||
|
$this->proxies = [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select host prototype ids for previously added host prototypes names.
|
||
|
*/
|
||
|
protected function selectHostPrototypes(): void {
|
||
|
$this->db_host_prototypes = [];
|
||
|
|
||
|
$sql_where = [];
|
||
|
|
||
|
foreach ($this->host_prototypes as $type => $hosts) {
|
||
|
foreach ($hosts as $host => $discovery_rules) {
|
||
|
foreach ($discovery_rules as $discovery_rule_id => $host_prototype_ids) {
|
||
|
$sql_where[] = '('.
|
||
|
'h.host='.zbx_dbstr($host).
|
||
|
' AND dr.'.($type === 'uuid' ? 'uuid' : 'key_').'='.zbx_dbstr($discovery_rule_id).
|
||
|
' AND '.dbConditionString('hp.'.($type === 'uuid' ? 'uuid' : 'host'), $host_prototype_ids).
|
||
|
')';
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ($sql_where) {
|
||
|
$db_host_prototypes = DBselect(
|
||
|
'SELECT hp.host,hp.uuid,hp.hostid,hd.parent_itemid,dr.hostid AS parent_hostid'.
|
||
|
' FROM hosts hp'.
|
||
|
' JOIN host_discovery hd ON hp.hostid=hd.hostid'.
|
||
|
' JOIN items dr ON hd.parent_itemid=dr.itemid'.
|
||
|
' JOIN hosts h on dr.hostid=h.hostid'.
|
||
|
' WHERE '.implode(' OR ', $sql_where)
|
||
|
);
|
||
|
while ($db_host_prototype = DBfetch($db_host_prototypes)) {
|
||
|
$this->db_host_prototypes[$db_host_prototype['hostid']] = [
|
||
|
'uuid' => $db_host_prototype['uuid'],
|
||
|
'host' => $db_host_prototype['host'],
|
||
|
'parent_hostid' => $db_host_prototype['parent_hostid'],
|
||
|
'discovery_ruleid' => $db_host_prototype['parent_itemid']
|
||
|
];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$this->host_prototypes = [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select httptestids for previously added web scenario names.
|
||
|
*/
|
||
|
protected function selectHttpTests(): void {
|
||
|
$this->db_httptests = [];
|
||
|
|
||
|
if (!$this->httptests) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$sql_where = [];
|
||
|
|
||
|
foreach ($this->httptests as $host => $httptests) {
|
||
|
$hostid = $this->findTemplateidOrHostidByHost($host);
|
||
|
|
||
|
if ($hostid !== false) {
|
||
|
$sql_where[] = '(ht.hostid='.zbx_dbstr($hostid)
|
||
|
.' AND ht.templateid IS NULL'
|
||
|
.' AND ('
|
||
|
.dbConditionString('ht.name', array_keys($httptests))
|
||
|
.' OR '.dbConditionString('ht.uuid', array_column($httptests, 'uuid'))
|
||
|
.'))';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ($sql_where) {
|
||
|
$db_httptests = DBselect(
|
||
|
'SELECT ht.hostid,ht.name,ht.httptestid,ht.uuid FROM httptest ht WHERE '.implode(' OR ', $sql_where)
|
||
|
);
|
||
|
|
||
|
while ($db_httptest = DBfetch($db_httptests)) {
|
||
|
$this->db_httptests[$db_httptest['httptestid']] = [
|
||
|
'uuid' => $db_httptest['uuid'],
|
||
|
'name' => $db_httptest['name'],
|
||
|
'hostid' => $db_httptest['hostid']
|
||
|
];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Unset web scenario refs to make referencer select them from db again.
|
||
|
*/
|
||
|
public function refreshHttpTests(): void {
|
||
|
$this->db_httptests = null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Select httpstepids for previously added web scenario step names.
|
||
|
*/
|
||
|
protected function selectHttpSteps(): void {
|
||
|
$this->db_httpsteps = [];
|
||
|
|
||
|
if (!$this->httpsteps) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$sql_where = [];
|
||
|
|
||
|
foreach ($this->httpsteps as $host => $httptests) {
|
||
|
$hostid = $this->findTemplateidOrHostidByHost($host);
|
||
|
|
||
|
if ($hostid !== null) {
|
||
|
foreach ($httptests as $httpstep_names) {
|
||
|
$sql_where[] = dbConditionString('hs.name', array_keys($httpstep_names));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ($sql_where) {
|
||
|
$db_httpsteps = DBselect(
|
||
|
'SELECT ht.hostid,hs.httptestid,hs.name,hs.httpstepid'.
|
||
|
' FROM httptest ht,httpstep hs'.
|
||
|
' WHERE ht.httptestid=hs.httptestid'.
|
||
|
' AND ('.implode(' OR ', $sql_where).')'
|
||
|
);
|
||
|
|
||
|
while ($db_httpstep = DBfetch($db_httpsteps)) {
|
||
|
$this->db_httpsteps[$db_httpstep['httpstepid']] = [
|
||
|
'name' => $db_httpstep['name'],
|
||
|
'hostid' => $db_httpstep['hostid'],
|
||
|
'httptestid' => $db_httpstep['httptestid']
|
||
|
];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|