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