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; }