Ejemplo n.º 1
0
 /**
  * Import triggers.
  */
 protected function processTriggers()
 {
     if (!$this->options['triggers']['createMissing'] && !$this->options['triggers']['updateExisting']) {
         return;
     }
     $allTriggers = $this->getFormattedTriggers();
     if (!$allTriggers) {
         return;
     }
     $triggersToCreate = [];
     $triggersToUpdate = [];
     // the list of triggers to process dependencies
     $triggers = [];
     foreach ($allTriggers as $trigger) {
         // search for existing items in trigger expressions
         foreach ($trigger['parsedExpressions'] as $expression) {
             $hostId = $this->referencer->resolveHostOrTemplate($expression['host']);
             $itemId = $hostId ? $this->referencer->resolveItem($hostId, $expression['item']) : false;
             if (!$itemId) {
                 throw new Exception(_s('Cannot find item "%1$s" on "%2$s" used in trigger "%3$s".', $expression['item'], $expression['host'], $trigger['description']));
             }
         }
         $triggerId = $this->referencer->resolveTrigger($trigger['description'], $trigger['expression']);
         if ($triggerId) {
             if ($this->options['triggers']['updateExisting']) {
                 $triggers[] = $trigger;
                 $trigger['triggerid'] = $triggerId;
                 unset($trigger['dependencies']);
                 $triggersToUpdate[] = $trigger;
             }
         } else {
             if ($this->options['triggers']['createMissing']) {
                 $triggers[] = $trigger;
                 unset($trigger['dependencies']);
                 $triggersToCreate[] = $trigger;
             }
         }
     }
     if ($triggersToCreate) {
         $result = API::Trigger()->create($triggersToCreate);
         foreach ($result['triggerids'] as $tnum => $triggerid) {
             $trigger = $triggersToCreate[$tnum];
             $this->referencer->addTriggerRef($trigger['description'], $trigger['expression'], $triggerid);
         }
     }
     if ($triggersToUpdate) {
         API::Trigger()->update($triggersToUpdate);
     }
     // refresh triggers because template triggers can be inherited to host and used in maps
     $this->referencer->refreshTriggers();
     $this->processTriggerDependencies($triggers);
 }
Ejemplo n.º 2
0
 /**
  * Import triggers.
  */
 protected function processTriggers()
 {
     $allTriggers = $this->getFormattedTriggers();
     if (empty($allTriggers)) {
         return;
     }
     $triggersToCreate = array();
     $triggersToUpdate = array();
     $triggersToCreateDependencies = array();
     foreach ($allTriggers as $trigger) {
         $triggerId = $this->referencer->resolveTrigger($trigger['description'], $trigger['expression']);
         if ($triggerId) {
             $deps = array();
             foreach ($trigger['dependencies'] as $dependency) {
                 $depTriggerId = $this->referencer->resolveTrigger($dependency['name'], $dependency['expression']);
                 if (!$depTriggerId) {
                     throw new Exception(_s('Trigger "%1$s" depends on trigger "%2$s", which does not exist.', $trigger['description'], $dependency['name']));
                 }
                 $deps[] = array('triggerid' => $depTriggerId);
             }
             $trigger['dependencies'] = $deps;
             $trigger['triggerid'] = $triggerId;
             $triggersToUpdate[] = $trigger;
         } else {
             $triggersToCreateDependencies[] = $trigger['dependencies'];
             unset($trigger['dependencies']);
             $triggersToCreate[] = $trigger;
         }
     }
     $triggerDependencies = array();
     $newTriggers = array();
     if ($this->options['triggers']['createMissing'] && $triggersToCreate) {
         $newTriggerIds = API::Trigger()->create($triggersToCreate);
         foreach ($newTriggerIds['triggerids'] as $tnum => $triggerId) {
             $trigger = $triggersToCreate[$tnum];
             $this->referencer->addTriggerRef($trigger['description'], $trigger['expression'], $triggerId);
             $newTriggers[$triggerId] = $trigger;
         }
     }
     // if we have new triggers with dependencies and they were created, create their dependencies
     if ($triggersToCreateDependencies && isset($newTriggerIds)) {
         foreach ($newTriggerIds['triggerids'] as $tnum => $triggerId) {
             $deps = array();
             foreach ($triggersToCreateDependencies[$tnum] as $dependency) {
                 $depTriggerId = $this->referencer->resolveTrigger($dependency['name'], $dependency['expression']);
                 if (!$depTriggerId) {
                     $trigger = $newTriggers[$triggerId];
                     throw new Exception(_s('Trigger "%1$s" depends on trigger "%2$s", which does not exist.', $trigger['description'], $dependency['name']));
                 }
                 $deps[] = array('triggerid' => $depTriggerId);
             }
             if (!empty($deps)) {
                 $triggerDependencies[] = array('triggerid' => $triggerId, 'dependencies' => $deps);
             }
         }
     }
     if ($this->options['triggers']['updateExisting'] && $triggersToUpdate) {
         API::Trigger()->update($triggersToUpdate);
     }
     if ($triggerDependencies) {
         API::Trigger()->update($triggerDependencies);
     }
     // refresh triggers because template triggers can be inherited to host and used in maps
     $this->referencer->refreshTriggers();
 }