Example #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;
 }
 public function import()
 {
     $job = $this->getEngine()->getJob();
     $config = $this->getEngine()->getConfig();
     $segment = $this->getSegment();
     $values = $segment->getValues();
     $fileName = $segment->getFilename();
     // We need to determine if we are a template
     if (isset($values['name'])) {
         // We are a template
         $job->addNotice("Saving internal service escalation template: " . $values['name'][0]['value']);
         NagiosServiceEscalationImporter::saveTemplate($values['name'][0]['value'], $segment);
         return true;
     }
     // Check if we need to bring in values from a template
     if (isset($values['use'])) {
         // We sure are using a template!
         // Okay, hokey multi-inheritance support for the importer
         $tempValues = $this->getTemplateValues($values['use'][0]['value']);
         // Okay, go through each
         foreach ($tempValues as $key => $val) {
             if (!isset($values[$key])) {
                 $values[$key] = $val;
             }
         }
     }
     // Okay, we first iterate through any possible dependent_host_name's
     if (isset($values['host_name'])) {
         $host_names = explode(",", $values['host_name'][0]['value']);
         foreach ($host_names as $host_name) {
             $escalation = new NagiosEscalation();
             $service = NagiosServicePeer::getByHostAndDescription($host_name, $values['service_description'][0]['value']);
             if (!$service) {
                 return false;
             }
             $escalation->setNagiosService($service);
             $ret = $this->__process($escalation);
             if (!$ret) {
                 return false;
             }
             $ret = $this->__addContacts($escalation);
             if (!$ret) {
                 return false;
             }
             // Need to give it a temp name
             $escalation->save();
             $escalation->setDescription("Imported Escalation #" . $escalation->getId());
             $escalation->save();
             $escalation->clearAllReferences(true);
             $service->clearAllReferences(true);
             $job->addNotice("NagiosServiceEscalationImporter finished importing Service Escalation for " . $host_name);
         }
     }
     if (isset($values['hostgroup_name'])) {
         $hostgroup_names = explode(",", $values['hostgroup_name'][0]['value']);
         foreach ($hostgroup_names as $hostgroup_name) {
             $escalation = new NagiosEscalation();
             $service = NagiosServicePeer::getByHostgroupAndDescription($hostgroup_name, $values['service_description'][0]['value']);
             if (!$service) {
                 return false;
             }
             $escalation->setNagiosService($service);
             $ret = $this->__process($escalation);
             if (!$ret) {
                 return false;
             }
             $ret = $this->__addContacts($escalation);
             if (!$ret) {
                 return false;
             }
             $escalation->save();
             $escalation->setDescription("Imported Escalation #" . $escalation->getId());
             $escalation->save();
             $escalation->clearAllReferences(true);
             $service->clearAllReferences(true);
             $job->addNotice("NagiosServiceEscalationImporter finished importing Service Escalation for hostgroup " . $hostgroup_name);
         }
     }
     return true;
 }