/** * Create new application. * If $batch is true it performs batch insert, in this case all applications must have same fields in same order. * * @param array $applications * @param bool $batch * * @return array */ public function create(array $applications, $batch = false) { $insertApplications = $applications; foreach ($insertApplications as &$app) { unset($app['applicationTemplates']); } unset($app); if ($batch) { $applicationids = DB::insertBatch('applications', $insertApplications); } else { $applicationids = DB::insert('applications', $insertApplications); } $applicationTemplates = array(); foreach ($applications as $anum => &$application) { $application['applicationid'] = $applicationids[$anum]; if (isset($application['applicationTemplates'])) { foreach ($application['applicationTemplates'] as $applicationTemplate) { $applicationTemplates[] = array('applicationid' => $application['applicationid'], 'templateid' => $applicationTemplate['templateid']); } } } // link inherited apps DB::insertBatch('application_template', $applicationTemplates); // TODO: REMOVE info $dbCursor = DBselect('SELECT a.name, h.name as hostname' . ' FROM applications a' . ' INNER JOIN hosts h ON h.hostid=a.hostid' . ' WHERE ' . dbConditionInt('a.applicationid', $applicationids)); while ($app = DBfetch($dbCursor)) { info(_s('Created: Application "%1$s" on "%2$s".', $app['name'], $app['hostname'])); } return $applications; }
/** * Update value maps. * * @param array $valuemaps An array of value maps. * @param string $valuemaps[]['valuemapid'] ID of the value map. * @param string $valuemaps[]['name'] Name of the value map (optional). * @param array $valuemaps[]['mappings'] Value mappings for value map (optional). * @param string $valuemaps[]['mappings'][]['value'] Value mapping original value (optional). * @param string $valuemaps[]['mappings'][]['newvalue'] Value to which the original value is mapped to (optional). * * @return array */ public function update($valuemaps) { $valuemaps = zbx_toArray($valuemaps); $this->validateUpdate($valuemaps); $upd_valuemaps = []; $upd_mappings = []; foreach ($valuemaps as $valuemap) { $valuemapid = $valuemap['valuemapid']; if (array_key_exists('mappings', $valuemap)) { $upd_mappings[$valuemapid] = []; foreach ($valuemap['mappings'] as $mapping) { $upd_mappings[$valuemapid][$mapping['value']] = $mapping['newvalue']; } } unset($valuemap['valuemapid'], $valuemap['mappings']); // Skip updating value maps, if name is not given. if (array_key_exists('name', $valuemap)) { $upd_valuemaps[$valuemapid] = $valuemap; } } if ($upd_valuemaps) { $db_valuemaps = API::getApiService()->select('valuemaps', ['output' => ['valuemapid', 'name'], 'valuemapids' => array_keys($upd_valuemaps)]); $update = []; foreach ($db_valuemaps as $db_valuemap) { $upd_valuemap = $upd_valuemaps[$db_valuemap['valuemapid']]; // Skip updating value maps, if name was not changed. if ($upd_valuemap['name'] !== $db_valuemap['name']) { $update[] = ['values' => $upd_valuemap, 'where' => ['valuemapid' => $db_valuemap['valuemapid']]]; add_audit_ext(AUDIT_ACTION_UPDATE, AUDIT_RESOURCE_VALUE_MAP, $db_valuemap['valuemapid'], $upd_valuemap['name'], 'valuemaps', $db_valuemap, $upd_valuemap); } } if ($update) { DB::update('valuemaps', $update); } } if ($upd_mappings) { $db_mappings = API::getApiService()->select('mappings', ['output' => ['mappingid', 'valuemapid', 'value', 'newvalue'], 'filter' => ['valuemapid' => array_keys($upd_mappings)]]); $insert_mapings = []; $update_mapings = []; $delete_mapingids = []; foreach ($db_mappings as $db_mapping) { if (array_key_exists($db_mapping['valuemapid'], $upd_mappings)) { $upd_mapping =& $upd_mappings[$db_mapping['valuemapid']]; if (array_key_exists($db_mapping['value'], $upd_mapping)) { if ($upd_mapping[$db_mapping['value']] !== $db_mapping['newvalue']) { $update_mapings[] = ['values' => ['newvalue' => $upd_mapping[$db_mapping['value']]], 'where' => ['mappingid' => $db_mapping['mappingid']]]; } unset($upd_mapping[$db_mapping['value']]); } else { $delete_mapingids[] = $db_mapping['mappingid']; } unset($upd_mapping); } else { $delete_mapingids[] = $db_mapping['mappingid']; } } foreach ($upd_mappings as $valuemapid => $upd_mapping) { foreach ($upd_mapping as $value => $newvalue) { $insert_mapings[] = ['valuemapid' => $valuemapid, 'value' => $value, 'newvalue' => $newvalue]; } } if ($insert_mapings) { DB::insertBatch('mappings', $insert_mapings); } if ($update_mapings) { DB::update('mappings', $update_mapings); } if ($delete_mapingids) { DB::delete('mappings', ['mappingid' => $delete_mapingids]); } } return ['valuemapids' => zbx_objectValues($valuemaps, 'valuemapid')]; }
/** * Add the given dependencies and inherit them on all child triggers. * * @param array $triggerPrototypes * @param string $triggerPrototypes[]['triggerid'] * @param array $triggerPrototypes[]['dependencies'] * @param string $triggerPrototypes[]['dependencies'][]['triggerid'] */ public function addDependencies(array $triggerPrototypes) { $this->validateAddDependencies($triggerPrototypes); $insert = []; foreach ($triggerPrototypes as $triggerPrototype) { if (!array_key_exists('dependencies', $triggerPrototype)) { continue; } foreach ($triggerPrototype['dependencies'] as $dependency) { $insert[] = ['triggerid_down' => $triggerPrototype['triggerid'], 'triggerid_up' => $dependency['triggerid']]; } } DB::insertBatch('trigger_depends', $insert); foreach ($triggerPrototypes as $triggerPrototype) { // Propagate the dependencies to the child triggers. $childTriggers = API::getApiService()->select($this->tableName(), ['output' => ['triggerid'], 'filter' => ['templateid' => $triggerPrototype['triggerid']]]); if ($childTriggers) { foreach ($childTriggers as &$childTrigger) { $childTrigger['dependencies'] = []; $childHostsQuery = get_hosts_by_triggerid($childTrigger['triggerid']); while ($childHost = DBfetch($childHostsQuery)) { foreach ($triggerPrototype['dependencies'] as $dependency) { $newDependency = [$childTrigger['triggerid'] => $dependency['triggerid']]; $newDependency = replace_template_dependencies($newDependency, $childHost['hostid']); $childTrigger['dependencies'][] = ['triggerid' => $newDependency[$childTrigger['triggerid']]]; } } } unset($childTrigger); $this->addDependencies($childTriggers); } } }