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