Exemplo n.º 1
0
 /**
  * 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;
 }
Exemplo n.º 2
0
 /**
  * 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')];
 }
Exemplo n.º 3
0
 /**
  * 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);
         }
     }
 }