Ejemplo n.º 1
0
 protected function execute($arguments = array(), $options = array())
 {
     // number of workers
     $n_childs = $options['processes'] - 1;
     // Start n child
     $this->startChildren($n_childs);
     $context = sfContext::createInstance(sfProjectConfiguration::getApplicationConfiguration('app', $options['env'], true));
     $this->redefineStdOut();
     // initialize the database connection
     $databaseManager = new sfDatabaseManager($this->configuration);
     $connection = $databaseManager->getDatabase($options['connection'])->getConnection();
     // add your code here
     // queue of response
     $this->queueResourceResponse = msg_get_queue(ftok(__FILE__, 'X'));
     $backup_location = $arguments['location'];
     if ($this->iAmParent()) {
         $this->log('[INFO] Get all nodes with VirtAgent activated...' . "\n");
         $query = EtvaServerQuery::create();
         // filter servers
         if ($options['filter']) {
             $fil_arr = explode(',', $options['filter']);
             foreach ($fil_arr as $sname) {
                 $query->addOr(EtvaServerPeer::NAME, $sname, Criteria::EQUAL);
             }
         }
         // exclude servers
         if ($options['exclude']) {
             $exc_arr = explode(',', $options['exclude']);
             foreach ($exc_arr as $sname) {
                 $query->addAnd(EtvaServerPeer::NAME, $sname, Criteria::NOT_EQUAL);
             }
         }
         $all_servers = $query->find();
         foreach ($all_servers as $server) {
             // add server to queue to process backup
             $this->addToQueue($server);
         }
         // Wait until queue is consume
         $this->waitForEmptyQueue();
     } else {
         $msgtype_send = 1;
         // Child process
         while ($server = $this->getFromQueue()) {
             $task_server_backup = new serverBackupTask($this->dispatcher, new sfFormatter());
             $res = $task_server_backup->run(array('serverid' => $server->getId()), array('location' => $backup_location, 'shutdown' => 'true', 'do_not_generate_tar' => 'true', 'delete_backups_n_days' => 2));
             $error = $task_server_backup->getLastError();
             $message = $task_server_backup->getReport();
             /*$res = 0;
               $message = "[INFO] Backup ".$server->getName()." VM successfully.\n";
               $error = array('message'=>$message);
               $this->log($message);*/
             // send report to the parent
             $msgObj = array('return' => $res, 'message' => $message, 'error' => $error, 'server' => $server);
             msg_send($this->queueResourceResponse, $msgtype_send, $msgObj);
         }
     }
 }