From f58eb1685cc0b70e3b09e85c7dfa1d458dfccfc3 Mon Sep 17 00:00:00 2001 From: Silvio Date: Thu, 18 Nov 2010 16:07:50 -0200 Subject: Initial isis:batch task --- lib/task/isisBatchTask.class.php | 74 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 lib/task/isisBatchTask.class.php diff --git a/lib/task/isisBatchTask.class.php b/lib/task/isisBatchTask.class.php new file mode 100644 index 0000000..95be44c --- /dev/null +++ b/lib/task/isisBatchTask.class.php @@ -0,0 +1,74 @@ +addArgument('rows', sfCommandArgument::OPTIONAL, 'Number of rows to process for each task'); + $this->addOptions(array( + new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name'), + new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'), + new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'doctrine'), + new sfCommandOption('loglevel', 'l', sfCommandOption::PARAMETER_REQUIRED, 'Log level', 'info'), + new sfCommandOption('database', 'd', sfCommandOption::PARAMETER_REQUIRED, 'Database', null), + )); + + $this->namespace = 'isis'; + $this->name = 'batch'; + $this->briefDescription = 'Imports an ISIS database into the application, batch version'; + $this->detailedDescription = <<configuration); + $connection = $databaseManager->getDatabase($options['connection'])->getConnection(); + + // Initialize an IsisConnector. + $class = (class_exists('IsisImporterManager')) ? 'IsisImporterManager' : 'sfIsisImporterManager'; + $isis = new $class($options['loglevel']); + + // Error handling. + if ($isis == FALSE) + { + $this->logSection('isis', 'Error opening ISIS database.'); + return FALSE; + } + + $databases = $isis->databases($options['database']); + + foreach ($databases as $database) + { + $rows = (isset($arguments['rows'])) ? $argument['rows'] : 20; + $max = 1000; // TODO + + for ($offset = 0; $offset <= $max; $offset = $offset + $rows) + { + $pid = pcntl_fork(); + if ($pid == -1) + { + die('Could not fork'); + } + else if ($pid) + { + // We are the parent. + // Protect against Zombie children. + pcntl_wait($status); + } + else + { + // We are the child. + // Mass ISIS import. + $isis->massImport($this, 'task', $rows, $offset, $database); + } + } + } + } +} -- cgit v1.2.3