Exemple #1
0
 private function parse_object_file($fileName, $importJob)
 {
     $fp = @fopen($fileName, 'r');
     $config = unserialize($importJob->getConfig());
     if (!$fp) {
         $importJob->addLogEntry("Failed to open object file: " . $fileName, ImportLogEntry::TYPE_ERROR);
         if (!$config->getVar('continue_error')) {
             return false;
         }
     }
     $lineNumber = 0;
     while ($line = fgets($fp)) {
         $lineNumber++;
         $line = trim($line);
         if (preg_match('/^\\s*(|#.*)$/', $line)) {
             // This is a comment
             continue;
         }
         // Need to merge lines that have a \ at the end
         if (preg_match('/\\\\$/', $line)) {
             // We need to merge, so remove the last character of the line,
             // then merge with next
             $newLine = substr($line, 0, strlen($line) - 2);
             do {
                 $line = fgets($fp);
                 $line = trim($line);
                 $newLine .= $line;
                 if (preg_match('/\\\\$/', $newLine)) {
                     // Chop off the \ again
                     $newLine = substr($newLine, 0, strlen($newLine) - 2);
                 }
             } while (preg_match('/\\\\$/', $line));
             $line = $newLine;
         }
         if (preg_match('/^\\s*define\\s+(\\S+)\\s*{\\s*$/', $line, $regs)) {
             // Setup object name
             $objectName = $regs[1];
             $segment = new NagiosImportFileSegment($fileName);
             continue;
         }
         if (preg_match('/\\s*(\\S+)\\s+([^#;]+)/', $line, $regs)) {
             if ($regs[1] != ";") {
                 // Check for a blank line (this is ugly, should fix the regex)
                 // See if the line has a \ on the end
                 $values = explode(',', $regs[2]);
                 foreach ($values as $val) {
                     if (trim($val) != "") {
                         $segment->add($lineNumber, trim($regs[1]), trim($val), $line);
                     }
                 }
             }
             continue;
         }
         if (preg_match('/^\\s*}/', $line)) {
             //Completed object End curley bracket must be on it's own line
             switch ($objectName) {
                 case 'contactgroup':
                     $importer = new NagiosContactGroupImporter($this, $segment);
                     if (!$importer->init()) {
                         return false;
                     }
                     if (!$importer->valid()) {
                         $this->addQueuedImporter($importer);
                     } else {
                         if (!$importer->import()) {
                             return false;
                         }
                     }
                     break;
                 case 'contact':
                     $importer = new NagiosContactImporter($this, $segment);
                     if (!$importer->init()) {
                         return false;
                     }
                     if (!$importer->valid()) {
                         $this->addQueuedImporter($importer);
                     } else {
                         if (!$importer->import()) {
                             return false;
                         }
                     }
                     break;
                 case 'host':
                     $importer = new NagiosHostImporter($this, $segment);
                     if (!$importer->init()) {
                         return false;
                     }
                     if (!$importer->valid()) {
                         $this->addQueuedImporter($importer);
                     } else {
                         if (!$importer->import()) {
                             return false;
                         }
                     }
                     break;
                 case 'hostgroup':
                     $importer = new NagiosHostGroupImporter($this, $segment);
                     if (!$importer->init()) {
                         return false;
                     }
                     if (!$importer->valid()) {
                         $this->addQueuedImporter($importer);
                     } else {
                         if (!$importer->import()) {
                             return false;
                         }
                     }
                     break;
                 case 'timeperiod':
                     $importer = new NagiosTimeperiodImporter($this, $segment);
                     if (!$importer->init()) {
                         return false;
                     }
                     if (!$importer->valid()) {
                         $this->addQueuedImporter($importer);
                     } else {
                         if (!$importer->import()) {
                             return false;
                         }
                     }
                     break;
                 case 'command':
                     $importer = new NagiosCommandImporter($this, $segment);
                     if (!$importer->init()) {
                         return false;
                     }
                     if (!$importer->valid()) {
                         $this->addQueuedImporter($importer);
                     } else {
                         if (!$importer->import()) {
                             return false;
                         }
                     }
                     break;
                 case 'service':
                     $importer = new NagiosServiceImporter($this, $segment);
                     if (!$importer->init()) {
                         return false;
                     }
                     if (!$importer->valid()) {
                         $this->addQueuedImporter($importer);
                     } else {
                         if (!$importer->import()) {
                             return false;
                         }
                     }
                     break;
                 case 'servicegroup':
                     $importer = new NagiosServiceGroupImporter($this, $segment);
                     if (!$importer->init()) {
                         return false;
                     }
                     if (!$importer->valid()) {
                         $this->addQueuedImporter($importer);
                     } else {
                         if (!$importer->import()) {
                             return false;
                         }
                     }
                     break;
                 case 'hostextinfo':
                     $importer = new NagiosHostExtInfoImporter($this, $segment);
                     if (!$importer->init()) {
                         return false;
                     }
                     if (!$importer->valid()) {
                         $this->addQueuedImporter($importer);
                     } else {
                         if (!$importer->import()) {
                             return false;
                         }
                     }
                     break;
                 case 'serviceextinfo':
                     $importer = new NagiosServiceExtInfoImporter($this, $segment);
                     if (!$importer->init()) {
                         return false;
                     }
                     if (!$importer->valid()) {
                         $this->addQueuedImporter($importer);
                     } else {
                         if (!$importer->import()) {
                             return false;
                         }
                     }
                     break;
                 case 'hostdependency':
                     $importer = new NagiosHostDependencyImporter($this, $segment);
                     if (!$importer->init()) {
                         return false;
                     }
                     if (!$importer->valid()) {
                         $this->addQueuedImporter($importer);
                     } else {
                         if (!$importer->import()) {
                             return false;
                         }
                     }
                     break;
                 case 'servicedependency':
                     $importer = new NagiosServiceDependencyImporter($this, $segment);
                     if (!$importer->init()) {
                         return false;
                     }
                     if (!$importer->valid()) {
                         $this->addQueuedImporter($importer);
                     } else {
                         if (!$importer->import()) {
                             return false;
                         }
                     }
                     break;
                 case 'hostescalation':
                     $importer = new NagiosHostEscalationImporter($this, $segment);
                     if (!$importer->init()) {
                         return false;
                     }
                     if (!$importer->valid()) {
                         $this->addQueuedImporter($importer);
                     } else {
                         if (!$importer->import()) {
                             return false;
                         }
                     }
                     break;
                 case 'serviceescalation':
                     $importer = new NagiosServiceEscalationImporter($this, $segment);
                     if (!$importer->init()) {
                         return false;
                     }
                     if (!$importer->valid()) {
                         $this->addQueuedImporter($importer);
                     } else {
                         if (!$importer->import()) {
                             return false;
                         }
                     }
                     break;
             }
             // switch
             $objectName = '';
             $importLines = array();
             continue;
         }
     }
     return true;
 }
 private function getTemplateValues($name)
 {
     $job = $this->getEngine()->getJob();
     $template = NagiosServiceDependencyImporter::getTemplateByName($name);
     if (!$template) {
         $job->addNotice("FATAL ERROR: Failed to get template by name: " . $name);
     }
     // $template is a segment instance
     $values = $template->getValues();
     if (isset($values['use'])) {
         // Multiple levels!
         $tempValues = $this->getTemplateValues($values['use'][0]['value']);
         // Okay, go through each
         foreach ($tempValues as $key => $val) {
             if (!isset($values[$key])) {
                 $values[$key] = $val;
             }
         }
     }
     return $values;
 }