Exemplo n.º 1
0
 public function executeJsonInit(sfWebRequest $request)
 {
     $id = $request->getParameter('id');
     $etva_node = EtvaNodePeer::retrieveByPK($id);
     $res = $this->check_pvs($etva_node);
     if ($res) {
         return $res;
     }
     $res = $this->check_vgs($etva_node);
     if ($res) {
         return $res;
     }
     $res = $this->check_lvs($etva_node);
     if ($res) {
         return $res;
     }
     $node_response = $etva_node->soapSend('getlvs_arr', array('force' => 1));
     if (!$node_response['success']) {
         $errors = $node_response['error'];
         Etva::getLogMessage(array('info' => ''), EtvaLogicalvolumePeer::_ERR_INCONSISTENT_);
         $etva_node->setErrorMessage(EtvaLogicalvolume_VA::LVINIT);
         $message = Etva::getLogMessage(array('info' => $node_response['info']), EtvaLogicalvolumePeer::_ERR_SOAPUPDATE_);
         sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($etva_node->getName(), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaLogicalvolumePeer::_ERR_SOAPUPDATE_, array('%info%' => $node_response['info']));
         $response = array('success' => false, 'error' => $msg_i18n, 'agent' => $etva_node->getName());
         $return = $this->setJsonError($response);
         return $this->renderText($return);
     }
     $dtable = array();
     $response_dtable = $etva_node->soapSend('device_table');
     if (!$response_dtable['success']) {
         $errors = $response_dtable['error'];
         Etva::getLogMessage(array('info' => ''), EtvaLogicalvolumePeer::_ERR_INCONSISTENT_);
         $etva_node->setErrorMessage(EtvaLogicalvolume_VA::LVINIT);
         $message = Etva::getLogMessage(array('info' => $response_dtable['info']), EtvaLogicalvolumePeer::_ERR_SOAPUPDATE_);
         sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($etva_node->getName(), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaLogicalvolumePeer::_ERR_SOAPUPDATE_, array('%info%' => $response_dtable['info']));
         $response = array('success' => false, 'error' => $msg_i18n, 'agent' => $etva_node->getName());
         $return = $this->setJsonError($response);
         return $this->renderText($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'];
         $inconsistent_message = Etva::getLogMessage(array('info' => print_r($errors, true)), EtvaLogicalvolumePeer::_ERR_INCONSISTENT_);
         $inconsistent_message_i18n = $this->getContext()->getI18N()->__(EtvaLogicalvolumePeer::_ERR_INCONSISTENT_, array('%info%' => ''));
         $etva_node->setErrorMessage(EtvaLogicalvolume_VA::LVINIT);
         $message = Etva::getLogMessage(array('info' => $inconsistent_message), EtvaLogicalvolumePeer::_ERR_SOAPUPDATE_);
         sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($etva_node->getName(), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaLogicalvolumePeer::_ERR_SOAPUPDATE_, array('%info%' => $inconsistent_message_i18n));
         //$response = array('success'=>false,'error'=>$errors);
         $response = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         $return = $this->setJsonError($response);
     }
     //accept node
     $cmd = $request->getParameter('cmd');
     if (!$etva_node) {
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaNodePeer::_ERR_NOTFOUND_ID_, array('%id%' => $id));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         //notify event log
         $node_log = Etva::getLogMessage(array('id' => $id), EtvaNodePeer::_ERR_NOTFOUND_ID_);
         $message = Etva::getLogMessage(array('name' => '', 'cmd' => $cmd, 'info' => $node_log), EtvaNodePeer::_ERR_INITIALIZE_CMD_);
         $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         // if is browser request return text renderer
         $error = $this->setJsonError($error);
         return $this->renderText($error);
     }
     $node_va = new EtvaNode_VA($etva_node);
     $response = $node_va->send_initialize();
     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 = sfContext::createInstance(sfProjectConfiguration::getApplicationConfiguration('app', $options['env'], true));
     parent::execute($arguments, $options);
     // initialize the database connection
     $databaseManager = new sfDatabaseManager($this->configuration);
     $connection = $databaseManager->getDatabase($options['connection'])->getConnection();
     // add your code here
     $this->log('Checking shared storage cluster consistency...' . "\n");
     $ok = 1;
     $affected = 0;
     $errors = array();
     $clusters = EtvaClusterPeer::doSelect(new Criteria());
     foreach ($clusters as $cluster) {
         $bulk_response_lvs = $cluster->soapSend('getlvs_arr', array('force' => 1));
         $bulk_response_dtable = $cluster->soapSend('device_table');
         $lv_va = new EtvaLogicalvolume_VA();
         foreach ($bulk_response_lvs as $node_id => $node_response) {
             if ($node_response['success']) {
                 //response received ok
                 $lvs = (array) $node_response['response'];
                 $node = EtvaNodePeer::retrieveByPK($node_id);
                 //$consist = $lv_va->check_shared_consistency($node,$lvs);
                 $response_dtable = (array) $bulk_response_dtable[$node_id];
                 $dtable = array();
                 if ($response_dtable['success']) {
                     $dtable = (array) $response_dtable['response'];
                     //$consist_dtable = $lv_va->check_shared_devicetable_consistency($node,$dtable,$bulk_response_dtable);
                 }
                 $check_res = $lv_va->check_consistency($node, $lvs, $dtable, $bulk_response_dtable);
                 if (!$check_res['success']) {
                     $err = $check_res['errors'];
                     $msg = sfContext::getInstance()->getI18N()->__(EtvaLogicalvolumePeer::_ERR_INCONSISTENT_, array('%info%' => ''));
                     $err_msg = sprintf(" node with id=%s is not consistent: %s \n", $node_id, $msg);
                     $errors[] = array('message' => $err_msg, 'debug' => $err);
                     $affected++;
                     $node->setErrorMessage(EtvaLogicalvolume_VA::LVINIT);
                 } else {
                     $node->clearErrorMessage(EtvaLogicalvolume_VA::LVINIT);
                 }
                 /*if( !$consist || !$consist_dtable ){
                                     $errors = $lv_va->get_missing_lv_devices();
                                     $msg = $errors ? $errors['message'] :
                                                     sfContext::getInstance()->getI18N()->__(EtvaLogicalvolumePeer::_ERR_INCONSISTENT_,array('%info%'=>''));
                 
                                     $err_msg = sprintf( " node with id=%s is not consistent: %s \n", $node_id, $msg );
                                     $errors[] = array( 'message'=> $err_msg, 'debug'=>array( 'consist_lvs'=>$consist, 'consist_dtable'=>$consist_dtable ) );
                                     $affected++;
                                     $node->setErrorMessage(EtvaLogicalvolume_VA::LVINIT);
                                 } else {
                                     $node->clearErrorMessage(EtvaLogicalvolume_VA::LVINIT);
                                 }*/
             } else {
                 $errors[] = $node_response;
                 $affected++;
             }
         }
         $bulk_response_pvs = $cluster->soapSend('hash_phydisks', array('force' => 1));
         $pv_va = new EtvaPhysicalvolume_VA();
         foreach ($bulk_response_pvs as $node_id => $node_response) {
             if ($node_response['success']) {
                 //response received ok
                 $pvs = (array) $node_response['response'];
                 $node = EtvaNodePeer::retrieveByPK($node_id);
                 $check_res = $pv_va->check_consistency($node, $pvs);
                 if (!$check_res['success']) {
                     $err = $check_res['errors'];
                     $msg = sfContext::getInstance()->getI18N()->__(EtvaPhysicalvolumePeer::_ERR_INCONSISTENT_, array('%info%' => ''));
                     $err_msg = sprintf(" node with id=%s is not consistent: %s \n", $node_id, $msg);
                     $errors[] = array('message' => $err_msg, 'debug' => $err);
                     $affected++;
                     $node->setErrorMessage(EtvaPhysicalvolume_VA::PVINIT);
                 } else {
                     $node->clearErrorMessage(EtvaPhysicalvolume_VA::PVINIT);
                 }
             } else {
                 $errors[] = $node_response;
                 $affected++;
             }
         }
         $bulk_responses_vgs = $cluster->soapSend('getvgpvs', array('force' => 1));
         $vg_va = new EtvaVolumegroup_VA();
         foreach ($bulk_response_vgs as $node_id => $node_response) {
             if ($node_response['success']) {
                 //response received ok
                 $vgs = (array) $node_response['response'];
                 $node = EtvaNodePeer::retrieveByPK($node_id);
                 $check_res = $vg_va->check_consistency($node, $vgs);
                 if (!$check_res['success']) {
                     $err = $check_res['errors'];
                     $msg = sfContext::getInstance()->getI18N()->__(EtvaVolumegroupPeer::_ERR_INCONSISTENT_, array('%info%' => ''));
                     $err_msg = sprintf(" node with id=%s is not consistent: %s \n", $node_id, $msg);
                     $errors[] = array('message' => $err_msg, 'debug' => $err);
                     $affected++;
                     $node->setErrorMessage(EtvaVolumegroup_VA::VGINIT);
                 } else {
                     $node->clearErrorMessage(EtvaVolumegroup_VA::VGINIT);
                 }
             } else {
                 $errors[] = $node_response;
                 $affected++;
             }
         }
     }
     if (!empty($errors)) {
         $this->log($message);
     } else {
         // log the message!
         $this->log("The check shared storage cluster consistency task ran!", 6);
     }
 }
Exemplo n.º 3
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;
 }