예제 #1
0
 protected function execute($arguments = array(), $options = array())
 {
     // Context
     $context = sfContext::createInstance(sfProjectConfiguration::getApplicationConfiguration('app', $options['env'], true));
     // initialize the database connection
     $databaseManager = new sfDatabaseManager($this->configuration);
     $connection = $databaseManager->getDatabase($options['connection'])->getConnection();
     // add your code here
     // server id
     $server = $arguments['server'];
     $this->log("[INFO] Shutdown server with '{$server}'");
     $etva_server = EtvaServerPeer::retrieveByPK($server);
     if (!$etva_server) {
         $etva_server = EtvaServerPeer::retrieveByUuid($server);
     }
     if (!$etva_server) {
         $etva_server = EtvaServerPeer::retrieveByName($server);
     }
     if (!$etva_server) {
         $msg_i18n = $context->getI18N()->__(EtvaServerPeer::_ERR_NOTFOUND_, array('name' => $server));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         $this->log("[ERROR] " . $error['error']);
         return $error;
     } else {
         if ($nid = $options['node']) {
             $etva_node = EtvaNodePeer::retrieveByPK($nid);
         } else {
             $etva_node = $etva_server->getEtvaNode();
         }
         if (!$etva_node) {
             //notify event log
             $msg_i18n = Etva::makeNotifyLogMessage(sfConfig::get('config_acronym'), EtvaNodePeer::_ERR_NOTFOUND_ID_, array('id' => $nid), EtvaServerPeer::_ERR_STOP_, array('name' => $server));
             $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
             $this->log("[ERROR] " . $error['error']);
             return $error;
         }
         $destroy = $options['destroy'] ? 1 : 0;
         $force = $options['force'] ? 1 : 0;
         $extra = array('destroy' => $destroy, 'force' => $force);
         $server_va = new EtvaServer_VA($etva_server);
         $response = $server_va->send_stop($etva_node, $extra);
         if ($response['success']) {
             $this->log("[INFO] " . $response['response']);
         } else {
             $this->log("[ERROR] " . $response['error']);
         }
         return $response;
     }
 }
예제 #2
0
 protected function _makeReturnOKWithNotify($agent, $msg, $args = array(), $msg_log = null, $args_l = array(), $priority = EtvaEventLogger::INFO)
 {
     Etva::makeNotifyLogMessage($agent, $msg, $args, $msg_log, $args_l, $priority);
     return $this->_makeReturnOK($agent, $msg, $args);
 }
예제 #3
0
 protected function execute($arguments = array(), $options = array())
 {
     // Context
     $context = sfContext::createInstance(sfProjectConfiguration::getApplicationConfiguration('app', $options['env'], true));
     // initialize the database connection
     $databaseManager = new sfDatabaseManager($this->configuration);
     $connection = $databaseManager->getDatabase($options['connection'])->getConnection();
     // add your code here
     // server id
     $server = $arguments['server'];
     $this->log("[INFO] Start server with '{$server}'");
     $etva_server = EtvaServerPeer::retrieveByPK($server);
     if (!$etva_server) {
         $etva_server = EtvaServerPeer::retrieveByUuid($server);
     }
     if (!$etva_server) {
         $etva_server = EtvaServerPeer::retrieveByName($server);
     }
     if (!$etva_server) {
         $msg_i18n = $context->getI18N()->__(EtvaServerPeer::_ERR_NOTFOUND_, array('name' => $server));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         $this->log("[ERROR] " . $error['error']);
         return $error;
     } else {
         if ($nid = $options['node']) {
             if (!($etva_node = EtvaNodePeer::retrieveByPK($nid))) {
                 //notify event log
                 $msg_i18n = Etva::makeNotifyLogMessage(sfConfig::get('config_acronym'), EtvaNodePeer::_ERR_NOTFOUND_ID_, array('id' => $nid), EtvaServerPeer::_ERR_START_, array('name' => $server));
                 $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
                 $this->log("[ERROR] " . $error['error']);
                 return $error;
             }
         } else {
             // get list of nodes that server can assign
             $nodes_toassign = $etva_server->listNodesAssignTo();
             if (count($nodes_toassign)) {
                 $etva_node = $nodes_toassign[0];
                 // get first
             } else {
                 //notify event log
                 $msg_i18n = Etva::makeNotifyLogMessage(sfConfig::get('config_acronym'), EtvaServerPeer::_ERR_NO_NODE_TO_ASSIGN_, array(), EtvaServerPeer::_ERR_START_, array('name' => $server));
                 $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
                 $this->log("[ERROR] " . $error['error']);
                 return $error;
             }
         }
         $server_va = new EtvaServer_VA($etva_server);
         if ($options['assign'] || $etva_server->getUnassigned()) {
             // Assign server to node
             $response = $server_va->send_assign($etva_node);
             if (!$response['success']) {
                 $this->log("[ERROR] " . $response['error']);
                 return $response;
             }
         }
         // start server
         $response = $server_va->send_start($etva_node);
         if ($response['success']) {
             // update GA Info
             $response_ga = $server_va->getGAInfo($etva_node);
             $this->log("[INFO] " . $response['response']);
         } else {
             $this->log("[ERROR] " . $response['error']);
         }
         return $response;
     }
 }
예제 #4
0
 public function systemCheck()
 {
     $etva_node = $this->etva_node;
     $method = self::SYSTEMCHECK;
     $response = $etva_node->soapSend($method, null, true);
     $success = $response['success'];
     $return = array();
     if (!$success) {
         //notify system log
         $message = Etva::makeNotifyLogMessage($etva_node->getName(), EtvaNodePeer::_ERR_SYSTEMCHECK_, array('name' => $etva_node->getName(), 'info' => $response['info']));
         $return = array('success' => false, 'agent' => $etva_node->getName(), 'error' => $message, 'info' => $message);
         return $return;
     }
     $node_response = $etva_node->soapSend('getlvs_arr', array('force' => 1));
     if (!$node_response['success']) {
         $errors = $node_response['error'];
         $etva_node->setErrorMessage(EtvaLogicalvolume_VA::LVINIT);
         $msg_i18n = Etva::makeNotifyLogMessage($etva_node->getName(), EtvaLogicalvolumePeer::_ERR_INCONSISTENT_, array('info' => $node_response['info']), EtvaNodePeer::_ERR_SYSTEMCHECK_, array('name' => $etva_node->getName()));
         $return = array('success' => false, 'error' => $msg_i18n, 'agent' => $etva_node->getName());
         return $return;
     }
     $dtable = array();
     $response_dtable = $etva_node->soapSend('device_table');
     if (!$response_dtable['success']) {
         $errors = $response_dtable['error'];
         $etva_node->setErrorMessage(EtvaLogicalvolume_VA::LVINIT);
         $msg_i18n = Etva::makeNotifyLogMessage($etva_node->getName(), EtvaLogicalvolumePeer::_ERR_INCONSISTENT_, array('info' => $response_dtable['info']), EtvaNodePeer::_ERR_SYSTEMCHECK_, array('name' => $etva_node->getName()));
         $return = array('success' => false, 'error' => $msg_i18n, 'agent' => $etva_node->getName());
         return $return;
     }
     $lvs = (array) $node_response['response'];
     $dtable = (array) $response_dtable['response'];
     $etva_cluster = $etva_node->getEtvaCluster();
     $bulk_response_dtable = $etva_cluster->soapSend('device_table');
     $lv_va = new EtvaLogicalvolume_VA();
     $check_res = $lv_va->check_consistency($etva_node, $lvs, $dtable, $bulk_response_dtable);
     if (!$check_res['success']) {
         $errors = $check_res['errors'];
         $etva_node->setErrorMessage(EtvaLogicalvolume_VA::LVINIT);
         $msg_i18n = Etva::makeNotifyLogMessage($etva_node->getName(), EtvaLogicalvolumePeer::_ERR_INCONSISTENT_, array('info' => print_r($errors, true)), EtvaNodePeer::_ERR_SYSTEMCHECK_, array('name' => $etva_node->getName()));
         $return = array('success' => false, 'error' => $msg_i18n, 'agent' => $etva_node->getName(), 'info' => $msg_i18n);
         return $return;
     }
     $etva_node->setState(EtvaNode::NODE_ACTIVE);
     $etva_node->save();
     //notify system log
     $message = Etva::makeNotifyLogMessage($etva_node->getName(), EtvaNodePeer::_OK_SYSTEMCHECK_, array('name' => $etva_node->getName()), null, array(), EtvaEventLogger::INFO);
     $return = array('success' => true, 'agent' => $etva_node->getName(), 'response' => $message);
     return $return;
 }
 public function send_expand(EtvaNode $etva_node)
 {
     $msg_ok_type = EtvaPhysicalvolumePeer::_OK_EXPAND_;
     $msg_err_type = EtvaPhysicalvolumePeer::_ERR_EXPAND_;
     $method = self::DEVICERESIZE;
     $etva_pv_uuid = $this->etva_pv->getUuid();
     $etva_pv_type = $this->etva_pv->getStorageType();
     $etva_pv_device = $this->etva_pv->getDevice();
     $params = array('device' => $etva_pv_device, 'uuid' => $etva_pv_uuid);
     // check if physical volume is shared
     $shared = $this->etva_pv->getStorageType() != EtvaPhysicalvolume::STORAGE_TYPE_LOCAL_MAP;
     $etva_cluster = $etva_node->getEtvaCluster();
     $bulk_responses = array();
     if ($shared) {
         // call resize at all nodes
         $bulk_responses = $etva_cluster->soapSend($method, $params);
     } else {
         $node_id = $etva_node->getId();
         // call resize
         $bulk_responses[$node_id] = $etva_node->soapSend($method, $params);
     }
     // sync physical volumes size
     $errors = $this->send_update($etva_node);
     if (!empty($errors)) {
         $result = array('success' => false, 'errors' => $errors);
         $msg_i18n = Etva::makeNotifyLogMessage($etva_node->getName(), $msg_err_type, array('name' => $this->etva_pv->getName(), 'info' => ''));
         $result['error'] = $msg_i18n;
         return $result;
     } else {
         //notify system log
         $message = Etva::getLogMessage(array('name' => $this->etva_pv->getName()), $msg_ok_type);
         $msg_i18n = sfContext::getInstance()->getI18N()->__($msg_ok_type, array('%name%' => $this->etva_pv->getName()));
         sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($etva_node->getName(), 'event.log', array('message' => $message)));
         $result = array('success' => true, 'agent' => $etva_node->getName(), 'response' => $msg_i18n);
         return $result;
     }
 }
예제 #6
0
 public function processCommonResponse($etva_node, $response, $method, $msg_ok_type, $msg_err_type, $msg_args = array())
 {
     if ($response['success']) {
         $response_decoded = (array) $response['response'];
         $returned_object = (array) $response_decoded['_obj_'];
         $msg_i18n = Etva::makeNotifyLogMessage($response['agent'], $msg_ok_type, $msg_args, null, array(), EtvaEventLogger::INFO);
         $result = array('success' => true, 'agent' => $response['agent'], 'response' => $msg_i18n);
         return $result;
     } else {
         $msg_args['info'] = $response['info'];
         $msg_i18n = Etva::makeNotifyLogMessage($response['agent'], $msg_err_type, $msg_args);
         $result = array('success' => false, 'agent' => $response['agent'], 'error' => $msg_i18n, 'info' => $msg_i18n);
         return $result;
     }
 }
 protected function execute($arguments = array(), $options = array())
 {
     $context = sfContext::createInstance(sfProjectConfiguration::getApplicationConfiguration('app', $options['env'], true));
     parent::execute($arguments, $options);
     // initialize the database connection
     $databaseManager = new sfDatabaseManager($this->configuration);
     $con = $databaseManager->getDatabase($options['connection'])->getConnection();
     // add your code here
     $this->log('[INFO] Checking Servers heartbeat...' . "\n");
     $servers_timeout = EtvaServerQuery::create()->filterByVmState(EtvaServer::RUNNING)->filterByGaState(EtvaServerPeer::_GA_RUNNING_)->filterByHasha(1)->where('hbtimeout>0 AND UNIX_TIMESTAMP(heartbeat) < (UNIX_TIMESTAMP(now()) - hbtimeout)')->useEtvaServerAssignQuery('ServerAssign', 'RIGHT JOIN')->useEtvaNodeQuery()->filterByState(EtvaNode::NODE_ACTIVE)->endUse()->endUse()->find();
     if (count($servers_timeout) > 0) {
         foreach ($servers_timeout as $etva_server) {
             $message = sprintf(' The server %s with id %s get heartbeat timed out (last heartbeat at %s and heartbeat timeout %s secods)', $etva_server->getName(), $etva_server->getId(), $etva_server->getHeartbeat(), $etva_server->getHbtimeout());
             $this->log($message);
             // add log message
             Etva::makeNotifyLogMessage($this->name, $message);
             $etva_node = $etva_server->getEtvaNode();
             $server_va = new EtvaServer_VA($etva_server);
             $response_ga = $etva_server->getGAInfo($etva_node);
             if (!$response_ga['success']) {
                 $msg = sprintf(' Something wrong with node %s agent, can\'t get GA state of the server %s with id %s run.', $etva_node->getName(), $etva_server->getName(), $etva_server->getId());
                 $this->log($msg);
                 // add log message
                 Etva::makeNotifyLogMessage($this->name, $msg);
                 $etva_server->setGaState(EtvaServerPeer::_GA_STOPPED_);
                 // mark GA as stopped
                 $etva_server->save();
             } else {
                 if ($reponse_ga['ga_state'] == EtvaServerPeer::_GA_RUNNING_) {
                     $message_ga = sprintf(' But the explicit check GA state of the server %s with id %s run with success.', $etva_server->getName(), $etva_server->getId());
                     $this->log($message_ga);
                     // add log message
                     Etva::makeNotifyLogMessage($this->name, $message_ga, array(), null, array(), EtvaEventLogger::INFO);
                 } else {
                     // go restart
                     $starttime = sfConfig::get('app_server_heartbeat_starttime');
                     $starttime_date = date("c", time() - $starttime);
                     if ($etva_server->getHblaststart() && $etva_server->getHblaststart() > $starttime_date) {
                         $msg = sprintf(' the server %s with id %s is in starttime.', $etva_server->getName(), $etva_server->getId());
                         $this->log($msg);
                         // add log message
                         Etva::makeNotifyLogMessage($this->name, $msg, array(), null, array(), EtvaEventLogger::INFO);
                     } else {
                         $last_nrestarts = $etva_server->getHbnrestarts();
                         if ($last_nrestarts >= sfConfig::get('app_server_heartbeat_number_of_restart')) {
                             $msg = sprintf(' the server %s with id %s exceed number of restart.', $etva_server->getName(), $etva_server->getId());
                             $this->log($msg);
                             // add log message
                             Etva::makeNotifyLogMessage($this->name, $msg);
                         } else {
                             $msg = sprintf(' the server %s with id %s is heartbeat out of date and will be restart.', $etva_server->getName(), $etva_server->getId());
                             $this->log($msg);
                             // add log message
                             Etva::makeNotifyLogMessage($this->name, $msg, array(), null, array(), EtvaEventLogger::INFO);
                             // force to stop
                             $response_stop = $server_va->send_stop($etva_node, array('force' => 1, 'destroy' => 1));
                             sleep(5);
                             // wait a few seconds
                             $response_start = $server_va->send_start($etva_node);
                             if (!$response_start['success']) {
                                 // start fail...
                                 sleep(10);
                                 // wait a few seconds
                                 $response_start = $server_va->send_start($etva_node);
                                 // start again
                             }
                             $etva_server->resetHeartbeat(EtvaServerPeer::_GA_STOPPED_);
                             // reset heartbeat and mark GA as stopped
                             $etva_server->setHbnrestarts($last_nrestarts + 1);
                             // inc number of restart
                             $etva_server->save();
                         }
                     }
                 }
             }
         }
     } else {
         $this->log("[INFO] No servers with heartbeat timed out.");
     }
     // log the message!
     $this->log("[INFO] The check servers heartbeat task ran!");
 }
예제 #8
0
 protected function processStartStop(EtvaNode $etva_node, $response, $method)
 {
     $etva_server = $this->etva_server;
     switch ($method) {
         case self::SERVER_START:
             $msg_ok_type = EtvaServerPeer::_OK_START_;
             $msg_err_type = EtvaServerPeer::_ERR_START_;
             break;
         case self::SERVER_STOP:
             $msg_ok_type = EtvaServerPeer::_OK_STOP_;
             $msg_err_type = EtvaServerPeer::_ERR_STOP_;
             break;
     }
     if (!$response['success']) {
         $result = $response;
         $msg_i18n = Etva::makeNotifyLogMessage($response['agent'], $response['info'], array(), $msg_err_type, array('name' => $etva_server->getName()));
         $result['error'] = $msg_i18n;
         return $result;
     }
     $response_decoded = (array) $response['response'];
     $returned_status = $response_decoded['_okmsg_'];
     $returned_object = (array) $response_decoded['_obj_'];
     // get some info from response...
     //update some server data from agent response
     $etva_server->initData($returned_object);
     $etva_server->setFirstBoot(0);
     if ($first_boot) {
         $etva_server->setBoot('filesystem');
     } else {
         $boot_field = $etva_server->getBoot();
         switch ($boot_field) {
             case 'filesystem':
             case 'pxe':
                 if (!$etva_server->getCdrom()) {
                     $etva_server->setLocation(null);
                 }
                 break;
         }
     }
     switch ($method) {
         case self::SERVER_START:
             $etva_server->setHblaststart('NOW');
             // update hb last start
             break;
     }
     $etva_server->save();
     // update free memory
     $etva_node->updateMemFree();
     $etva_node->save();
     //notify event log
     $msg_i18n = Etva::makeNotifyLogMessage($response['agent'], $msg_ok_type, array('name' => $etva_server->getName()), null, array(), EtvaEventLogger::INFO);
     $result = array('success' => true, 'agent' => $response['agent'], 'response' => $msg_i18n);
     return $result;
 }
예제 #9
0
 protected function processJsonForm(sfWebRequest $request, sfForm $form, $form_data = null)
 {
     if (!$form_data) {
         $form_data = (array) json_decode($request->getParameter($form->getName()));
     }
     $form->bind($form_data);
     if ($form->isValid()) {
         // if default cluster changed
         if ($form_data['isDefaultCluster']) {
             $updatecluster = array('Isdefaultcluster' => 0);
             EtvaClusterQuery::create()->update($updatecluster);
         }
         try {
             $etva_cluster = $form->save();
             $result = array('success' => true, 'object' => $etva_cluster);
         } catch (Exception $e) {
             $result = array('success' => false, 'error' => array('cluster' => $e->getMessage()), 'obj' => $etva_cluster);
             return $result;
         }
         return $result;
     } else {
         $errors = array();
         foreach ($form->getErrorSchema() as $field => $error) {
             $errors[$field] = $error->getMessage();
         }
         //notify system log
         $msg_i18n = Etva::makeNotifyLogMessage(sfConfig::get('config_acronym'), EtvaClusterPeer::_ERR_UPDATE_, array('name' => $form_data['name'], 'info' => $this->setJsonError($errors)));
         $result = array('success' => false, 'error' => $msg_i18n, 'info' => $msg_i18n);
         return $result;
     }
 }
예제 #10
0
 /**
  *
  *
  * stops virtual machine
  *
  * request object is like this;
  * <code>
  * $request['nid'] = $nid; //node ID
  * $request['server'] = $name // server name
  * </code>
  *
  * @param sfWebRequest $request A request object
  * @return string json string representation of array('success'=>true,'agent'=>$agent, 'response'=>$response)
  *
  */
 public function executeJsonStop(sfWebRequest $request)
 {
     $nid = $request->getParameter('nid');
     $server = $request->getParameter('server');
     if (!($etva_node = EtvaNodePeer::retrieveByPK($nid))) {
         //notify event log
         $msg_i18n = Etva::makeNotifyLogMessage(sfConfig::get('config_acronym'), EtvaNodePeer::_ERR_NOTFOUND_ID_, array('id' => $nid), EtvaServerPeer::_ERR_STOP_, array('name' => $server));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         // if is a CLI soap request return json encoded data
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($error);
         }
         // if is browser request return text renderer
         $error = $this->setJsonError($error);
         return $this->renderText($error);
     }
     if (!($etva_server = $etva_node->retrieveServerByName($server))) {
         //notify event log
         $msg_i18n = Etva::makeNotifyLogMessage($etva_node->getName(), EtvaServerPeer::_ERR_NOTFOUND_, array('name' => $server), EtvaServerPeer::_ERR_STOP_, array('name' => $server));
         $error = array('agent' => $etva_node->getName(), 'success' => false, 'error' => $msg_i18n);
         // if is a CLI soap request return json encoded data
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($error);
         }
         // if is browser request return text renderer
         $error = $this->setJsonError($error);
         return $this->renderText($error);
     }
     $destroy = $request->getParameter('destroy') ? 1 : 0;
     $force = $request->getParameter('force') ? 1 : 0;
     $extra = array('destroy' => $destroy, 'force' => $force);
     $server_va = new EtvaServer_VA($etva_server);
     $response = $server_va->send_stop($etva_node, $extra);
     if ($response['success']) {
         $return = json_encode($response);
         // if the request is made throught soap request...
         if (sfConfig::get('sf_environment') == 'soap') {
             return $return;
         }
         // if is browser request return text renderer
         $this->getResponse()->setHttpHeader('Content-type', 'application/json');
         return $this->renderText($return);
     } else {
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($response);
         }
         $return = $this->setJsonError($response);
         return $this->renderText($return);
     }
 }
예제 #11
0
 protected function execute($arguments = array(), $options = array())
 {
     // Context
     $context = sfContext::createInstance(sfProjectConfiguration::getApplicationConfiguration('app', $options['env'], true));
     // initialize the database connection
     $databaseManager = new sfDatabaseManager($this->configuration);
     $connection = $databaseManager->getDatabase($options['connection'])->getConnection();
     // add your code here
     // server id
     $server = $arguments['server'];
     $this->log("[INFO] Check status of server '{$server}'");
     $etva_server = EtvaServerPeer::retrieveByPK($server);
     if (!$etva_server) {
         $etva_server = EtvaServerPeer::retrieveByUuid($server);
     }
     if (!$etva_server) {
         $etva_server = EtvaServerPeer::retrieveByName($server);
     }
     if (!$etva_server) {
         $msg_i18n = $context->getI18N()->__(EtvaServerPeer::_ERR_NOTFOUND_, array('name' => $server));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         $this->log("[ERROR] " . $error['error']);
         return $error;
     } else {
         if ($nid = $options['node']) {
             $etva_node = EtvaNodePeer::retrieveByPK($nid);
         } else {
             $etva_node = $etva_server->getEtvaNode();
         }
         /*if(!$etva_node){
         
                     //notify event log
                     $msg_i18n = Etva::makeNotifyLogMessage(sfConfig::get('config_acronym'),
                                                                             EtvaNodePeer::_ERR_NOTFOUND_ID_, array('id'=>$nid));
                     $error = array('success'=>false,'agent'=>sfConfig::get('config_acronym'),'error'=>$msg_i18n,'info'=>$msg_i18n);
         
                     $this->log("[ERROR] ".$error['error']);
                     return $error;
                 }
         
                 $server_va = new EtvaServer_VA($etva_server);
                 $response = $server_va->getGAInfo($etva_node);   // update GA Info
                 */
         // TODO force check
         $response = array('success' => true, 'response' => 'check ok', 'agent' => sfConfig::get('config_acronym'));
         if ($etva_node) {
             $response['agent'] = $etva_node->getName();
         }
         if ($options['check']) {
             if (!$options['request_id']) {
                 $options['request_id'] = UUID::generate(UUID::UUID_RANDOM, UUID::FMT_STRING);
             }
             $response['_request_id'] = $options['request_id'];
             $response['_request_status'] = EtvaAsynchronousJob::PENDING;
             if ($etva_server->getVmState() == $options['check']) {
                 $response['_request_status'] = EtvaAsynchronousJob::FINISHED;
                 $msg_ok_type = '';
                 if ($options['check'] == EtvaServer::STATE_RUNNING) {
                     $msg_ok_type = EtvaServerPeer::_OK_START_;
                 } elseif ($options['check'] == EtvaServer::STATE_STOP) {
                     $msg_ok_type = EtvaServerPeer::_OK_STOP_;
                 }
                 if ($msg_ok_type) {
                     $response['response'] = Etva::makeNotifyLogMessage($response['agent'], $msg_ok_type, array('name' => $etva_server->getName()), null, array(), EtvaEventLogger::INFO);
                 }
             }
             //$this->log("[DEBUG] status=".$response['_request_status']." state=".$etva_server->getVmState()." == ".$options['check']);
         }
         if ($response['success']) {
             $this->log("[INFO] " . $response['response']);
             //$this->log("[DEBUG ".print_r($response,true));
         } else {
             $this->log("[ERROR] " . $response['error']);
         }
         return $response;
     }
 }
 protected function execute($arguments = array(), $options = array())
 {
     $context = sfContext::createInstance(sfProjectConfiguration::getApplicationConfiguration('app', 'dev', true));
     parent::execute($arguments, $options);
     // initialize the database connection
     $databaseManager = new sfDatabaseManager($this->configuration);
     $con = $databaseManager->getDatabase($options['connection'])->getConnection();
     // add your code here
     $this->log('[INFO] Send explicit check to VirtAgents...' . "\n");
     $inactive_nodes = EtvaNodeQuery::create()->filterByState(EtvaNode::NODE_INACTIVE)->find();
     if (count($inactive_nodes) > 0) {
         $queue = new processCheckQueuing($this);
         foreach ($inactive_nodes as $node) {
             $cluster = $node->getEtvaCluster();
             // only if cluster has HA
             if ($cluster->getHasNodeHA()) {
                 $message = sprintf('Node %s is inactive and the cluster %s has Node HA configured.', $node->getName(), $cluster->getName());
                 $this->log($message);
                 Etva::makeNotifyLogMessage($this->name, $message);
                 // if fail mark as coma
                 $etva_node_va = new EtvaNode_VA($node);
                 $response = $etva_node_va->checkState(EtvaNode::NODE_COMA);
                 if (!$response['success']) {
                     $msg_fail = sprintf(' agent %s getstate fail ', $node->getName());
                     $this->log($msg_fail);
                     Etva::makeNotifyLogMessage($this->name, $msg_fail);
                     $queue->enqueueProcess($node, 180);
                 } else {
                     $msg_ok = sprintf(' agent %s getstate with success ', $node->getName());
                     $this->log($msg_ok);
                     Etva::makeNotifyLogMessage($this->name, $msg_ok, array(), null, array(), EtvaEventLogger::INFO);
                 }
             } else {
                 $msg_noha = sprintf('Node %s is inactive but the cluster %s doesn\'t have Node HA configured.', $node->getName(), $cluster->getName());
                 $this->log($msg_noha);
             }
         }
         $queue->loop();
     } else {
         $this->log('No inactive nodes found!');
     }
 }