Exemplo n.º 1
0
 public function backup($force, $diagnostic = false)
 {
     if (!$diagnostic) {
         $serial_number = $this->serial_number;
         //clear stage cache
         $this->delStage(self::BACKUP_STAGE);
         $this->delStage(self::MA_BACKUP);
     } else {
         $response_msg = '';
         $va_down = array();
     }
     /*
      * VIRT AGENTS
      */
     $node_list = EtvaNodePeer::getWithServers();
     $node_num = count($node_list);
     if (!$diagnostic) {
         if ($node_num != 1) {
             /*
              * ERROR should be only one element (standard ETVA release only)
              */
             $msg = "Sould only be one Virtualization Agent! {$node_num} found!";
             $data = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'info' => $msg, 'error' => $msg);
             return $data;
         }
     }
     $archive_files = array();
     foreach ($node_list as $node) {
         /*
          * check node state ok to comm with agent
          */
         if (!$diagnostic) {
             if (!$node->getState()) {
                 $node_name = $node->getName();
                 $msg = sfContext::getInstance()->getI18N()->__(EtvaNodePeer::_STATE_DOWN_, array('%name%' => $node_name));
                 $data = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'info' => $msg, 'error' => $msg);
                 return $data;
             }
         } else {
             if ($node->getInitialize() == EtvaNodePeer::_INITIALIZE_PENDING_) {
                 continue;
             }
             if (!$node->getState()) {
                 $response_msg .= $node->getName();
                 $response_msg .= ', ';
                 $va_down[] = $node->getName();
                 $command = "touch ";
                 $command .= $this->archive_base_dir . "/";
                 $command .= $node->getName() . "_down";
                 exec($command);
                 continue;
             }
         }
         if (!$diagnostic) {
             $servers_list = $node->getEtvaServers();
             $servers_down = array();
             /*
              * Firs pass, check for servers down...
              */
             foreach ($servers_list as $server) {
                 $server_name = $server->getName();
                 $server_state = $server->getState();
                 $server_vm = $server->getVmState();
                 $server_ma = $server->getAgentTmpl();
                 /*
                  * if there's an agent in VM and if vm not running or agent is down add to servers down
                  */
                 if ($server_ma && !$server_state) {
                     $servers_down[] = Etva::getLogMessage(array('agent' => $server->getName(), 'msg' => 'Down'), Etva::_AGENT_MSG_);
                 }
             }
             /*
              * First pass return errors found
              */
             if (!empty($servers_down) && !$force) {
                 $data = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'action' => self::MA_BACKUP, 'info' => implode('<br>', $servers_down), 'error' => implode(' ', $servers_down));
                 return $data;
             }
             /*
              * Second pass...user has been warn
              */
             $servers_error = array();
             $this->setStage(self::BACKUP_STAGE, self::MA_BACKUP);
             foreach ($servers_list as $server) {
                 $server_name = $server->getName();
                 $server_state = $server->getState();
                 $server_vm = $server->getVmState();
                 $server_ma = $server->getAgentTmpl();
                 $server_uuid = $server->getUuid();
                 /*
                  * if there's an agent in VM send backup command
                  */
                 if ($server_ma && $server_state) {
                     /*
                      * take care of MA backup stuff here....
                      */
                     $this->setStage(self::MA_BACKUP, $server_ma);
                     $ma_filename = sprintf(self::MA_ARCHIVE_FILE, $server_uuid, $server_ma);
                     // filename path without extension yet. it will be given by get_backupconf result
                     $full_path = $this->archive_base_dir . '/' . $ma_filename;
                     $ma_backup = $this->get_backupconf($server_name, $server->getIp(), $server->getAgentPort(), $full_path);
                     if (!$ma_backup['success']) {
                         $servers_error[] = $ma_backup['error'];
                         continue;
                     }
                     $archive_files[] = $ma_backup['path'];
                 }
             }
             // end servers backup agents
         }
         /*
          * get VA backup
          *
          */
         $node_uuid = $node->getUuid();
         $node_name = $node->getName();
         $va_filename = sprintf(self::VA_ARCHIVE_FILE, $node_uuid, 'VA');
         // filename path without extension yet. it will be given by get_backupconf result
         $full_path = $this->archive_base_dir . '/' . $va_filename;
         $va_backup = $this->get_backupconf($node_name, $node->getIp(), $node->getPort(), $full_path, $diagnostic);
         if ($va_backup['success']) {
             $archive_files[] = $va_backup['path'];
         }
     }
     if (!$diagnostic) {
         if (!empty($servers_error)) {
             $data = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'action' => self::MA_BACKUP, 'info' => implode('<br>', $servers_error), 'error' => implode(' ', $servers_error));
             return $data;
         }
     }
     /*
      *
      * CENTRAL MANAGEMENT BACKUP (DB)
      *
      *
      */
     $db_filename = $this->tmp_db_filename;
     $this->setStage(self::BACKUP_STAGE, self::DB_BACKUP);
     // do NOT store session info in backup
     $data = new MyPropelData();
     $data->dumpData($db_filename, 'all', array('Sessions'), null);
     $archive_files[] = $db_filename;
     error_log('CM BACKUP');
     error_log($db_filename);
     if (!$diagnostic) {
         $response = $this->uploadApplianceBackup($archive_files);
         if (!empty($servers_error)) {
             $response['errors'] = implode('<br>', $servers_error);
         }
     } else {
         $response_msg .= ' reported down. Their state was not included.';
         $response = array('success' => true, 'agent' => sfConfig::get('config_acronym'), 'info' => $response_msg, 'va_down' => $va_down);
     }
     return $response;
 }
Exemplo n.º 2
0
 public function executeJsonNodeList(sfWebRequest $request)
 {
     $nodes = EtvaNodePeer::getWithServers();
     $elements = array();
     foreach ($nodes as $node) {
         $node_array = $node->toArray();
         foreach ($node->getServers() as $i => $server) {
             $server_array = $server->toArray();
             $node_array['servers'][] = $server_array;
         }
         $elements[] = $node_array;
     }
     $result = array('success' => true, 'total' => count($elements), 'response' => $elements);
     $return = json_encode($result);
     if (sfConfig::get('sf_environment') == 'soap') {
         return $return;
     }
 }