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; } }
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); }
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; } }
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; } }
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!"); }
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; }
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; } }
/** * * * 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); } }
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!'); } }