示例#1
0
 public function executeJsonList(sfWebRequest $request)
 {
     $c = new Criteria();
     $clusters = EtvaClusterPeer::doSelect($c);
     $elements = array();
     foreach ($clusters as $cluster) {
         $elements[] = $cluster->toArray();
     }
     $return = array('data' => $elements);
     $result = json_encode($return);
     $this->getResponse()->setHttpHeader('Content-type', 'application/json');
     return $this->renderText($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);
     $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);
     }
 }
示例#3
0
 protected function generateTree()
 {
     $dc_criteria = new Criteria();
     $dc_criteria->addJoin(EtvaClusterPeer::ID, EtvaNodePeer::CLUSTER_ID, Criteria::LEFT_JOIN);
     $dc_criteria->setDistinct();
     $datacenters = EtvaClusterPeer::doSelect($dc_criteria);
     $show_cluster_contextmenu = $this->getUser()->isSuperAdmin();
     $aux_datacenter = array();
     foreach ($datacenters as $datacenter) {
         $dc_nodes = $datacenter->getEtvaNodes();
         $datacenter_name = $datacenter->getName();
         $datacenter_id = $datacenter->getId();
         if (count($dc_nodes) == 0) {
             $aux_datacenter[] = array('text' => $datacenter->getName(), 'type' => 'cluster', 'id' => "d" . $datacenter->getId(), 'singleClickExpand' => false, 'children' => array(), 'contextmenu' => $show_cluster_contextmenu, 'expanded' => true, 'cls' => 'x-tree-node-collapsed ');
             continue;
         }
         // only nodes from the datacenter
         $criteria = new Criteria();
         $sparenode_isFree = false;
         $sparenode_id = null;
         $sparenode = $datacenter->getSpareNode();
         if ($sparenode) {
             $sparenode_id = $sparenode->getId();
             $sparenode_isFree = $sparenode->isNodeFree() ? true : false;
         }
         error_log("TREE[INFO] Numer of '" . $datacenter_name . "' nodes : " + count($dc_nodes));
         //********************** old code
         $user_id = $this->getUser()->getId();
         $perm_dc = $this->getUser()->hasDatacenterCredential(array('admin', $datacenter->getId()));
         $aux = array();
         // unassigned servers
         $unassigned_servers = array();
         //BaseEtvaNode
         foreach ($dc_nodes as $node) {
             //
             $node_name = $node->getName();
             $state = $node->getState();
             $initialize = $node->getInitialize();
             $node_qtip = $this->getContext()->getI18N()->__(EtvaNodePeer::_STATE_UP_, array('%name%' => $node_name));
             switch ($initialize) {
                 case EtvaNode_VA::INITIALIZE_OK:
                     $cls_node = 'active';
                     break;
                 case EtvaNode_VA::INITIALIZE_PENDING:
                     $cls_node = 'pending';
                     $node_qtip = $this->getContext()->getI18N()->__(EtvaNodePeer::_INITIALIZE_PENDING_, array('%name%' => $node_name));
                     break;
             }
             if ($state == EtvaNode::NODE_MAINTENANCE_UP) {
                 $cls_node = 'active';
             } elseif ($state == EtvaNode::NODE_FAIL_UP) {
                 $cls_node = 'active';
             } elseif ($state != EtvaNode::NODE_ACTIVE) {
                 $cls_node = 'no-active';
                 $node_qtip = $this->getContext()->getI18N()->__(EtvaNodePeer::_STATE_DOWN_, array('%name%' => $node_name));
             }
             $last_message = $node->getLastMessage();
             $iconCls = '';
             if ($node->getIssparenode()) {
                 $iconCls = 'icon-sparenode';
             }
             switch ($node->getState()) {
                 case EtvaNode::NODE_FAIL_UP:
                 case EtvaNode::NODE_FAIL:
                     $iconCls = 'icon-fail';
                     break;
                 case EtvaNode::NODE_MAINTENANCE_UP:
                 case EtvaNode::NODE_MAINTENANCE:
                     $iconCls = 'icon-maintenance';
                     break;
             }
             $message_decoded = json_decode($last_message, true);
             switch ($message_decoded['priority']) {
                 case EtvaEventLogger::ERR:
                     $iconCls = 'icon-error';
                     break;
             }
             if ($message_decoded['message']) {
                 $node_qtip = $this->getContext()->getI18N()->__($message_decoded['message']);
             }
             $has_servers_running = false;
             $aux_servers = array();
             foreach ($node->getServers() as $i => $server) {
                 if ($perm_dc or $this->getUser()->hasServerCredential(array('op', $server->getId()))) {
                     $state_server = $server->getState();
                     $agent_server_port = $server->getAgentPort();
                     $agent_tmpl = $server->getAgentTmpl();
                     $vm_state = $server->getVmState();
                     $vm_is_running = $server->isRunning() ? true : false;
                     $cls_server = 'no-active';
                     if ($vm_is_running) {
                         $has_servers_running = true;
                         if ($aoncontextmenugent_server_port) {
                             if (!$state_server) {
                                 $cls_server = 'some-active';
                             } else {
                                 $cls_server = 'active';
                             }
                         } else {
                             $cls_server = 'active';
                         }
                     } else {
                         if ($agent_server_port) {
                             if ($state_server) {
                                 $cls_server = 'some-active';
                             }
                         }
                     }
                     $child_id = 's' . $server->getID();
                     $srv_qtip = '';
                     $draggable = $perm_dc ? true : false;
                     $all_shared = $server->isAllSharedLogicalvolumes();
                     $has_snapshots = $server->hasSnapshots();
                     $has_disks = $server->hasEtvaServerLogicals();
                     $has_devs = $server->hasDevices();
                     $srv_iconCls = $vm_is_running ? 'icon-vm-stat-ok' : 'icon-vm-stat-nok';
                     $join_cls_server = $cls_server . " " . $srv_iconCls;
                     # check if vm has etasp info
                     $ga_info = $server->getGaInfo();
                     $ga_obj = json_decode($ga_info);
                     $plone = $ga_obj->etasp ? 1 : 0;
                     $aux_servers[] = array('text' => $server->getName(), 'type' => 'server', 'id' => $child_id, 'node_id' => $node->getID(), 'state' => $state_server, 'agent_tmpl' => $agent_tmpl, 'cls' => $join_cls_server, 'url' => $this->getController()->genUrl('server/view?id=' . $server->getID()), 'vm_state' => $vm_state, 'vm_is_running' => $vm_is_running, 'unassigned' => false, 'all_shared' => $all_shared, 'has_snapshots' => $has_snapshots, 'has_disks' => $has_disks, 'has_devices' => $has_devs, 'leaf' => true, 'draggable' => $perm_dc && $server->canMove(), 'qtip' => $srv_qtip, 'ga_state' => $server->getGaState(), 'ga_info' => $server->getGaInfo(), 'plone' => $plone, 'contextmenu' => $perm_dc);
                 }
             }
             //node array fulfilling
             if (empty($aux_servers)) {
                 if ($perm_dc) {
                     // only show node with empty servers if have permission on that node
                     $aux[] = array('text' => $node_name, 'type' => 'node', 'iconCls' => $iconCls, 'state' => $state, 'id' => $node->getID(), 'initialize' => $initialize, 'url' => $this->getController()->genUrl('node/view?id=' . $node->getID()), 'cluster_id' => $node->getClusterId(), 'can_create_vms' => $node->canCreateVms(), 'children' => $aux_servers, 'expanded' => true, 'qtip' => $node_qtip, 'cls' => 'x-tree-node-collapsed ' . $cls_node, 'contextmenu' => $perm_dc, 'initialize' => $node->getInitialize(), 'sparenodeid' => $sparenode_id, 'has_servers_running' => $has_servers_running, 'sparenodeIsFree' => $sparenode_isFree);
                 }
             } else {
                 $aux[] = array('text' => $node_name, 'type' => 'node', 'iconCls' => $iconCls, 'state' => $state, 'id' => $node->getID(), 'initialize' => $initialize, 'cls' => $cls_node, 'url' => $this->getController()->genUrl('node/view?id=' . $node->getID()), 'cluster_id' => $node->getClusterId(), 'can_create_vms' => $node->canCreateVms(), 'singleClickExpand' => true, 'qtip' => $node_qtip, 'children' => $aux_servers, 'contextmenu' => $perm_dc, 'initialize' => $node->getInitialize(), 'sparenodeid' => $sparenode_id, 'has_servers_running' => $has_servers_running, 'sparenodeIsFree' => $sparenode_isFree);
             }
         }
         $etva_unassigned_servers = EtvaServerQuery::create()->filterByClusterId($datacenter->getId())->useEtvaServerAssignQuery('ServerAssign', 'LEFT JOIN')->filterByNodeId(null)->endUse()->find();
         foreach ($etva_unassigned_servers as $i => $server) {
             if ($perm_dc or $this->getUser()->hasServerCredential(array('op', $server->getId()))) {
                 $state_server = $server->getState();
                 $agent_server_port = $server->getAgentPort();
                 $agent_tmpl = $server->getAgentTmpl();
                 $vm_state = $server->getVmState();
                 $vm_is_running = $server->isRunning() ? true : false;
                 $cls_server = 'no-active';
                 if ($vm_is_running) {
                     $has_servers_running = true;
                     if ($aoncontextmenugent_server_port) {
                         if (!$state_server) {
                             $cls_server = 'some-active';
                         } else {
                             $cls_server = 'active';
                         }
                     } else {
                         $cls_server = 'active';
                     }
                 } else {
                     if ($agent_server_port) {
                         if ($state_server) {
                             $cls_server = 'some-active';
                         }
                     }
                 }
                 $child_id = 's' . $server->getID();
                 $srv_qtip = '';
                 $draggable = $perm_dc ? true : false;
                 $all_shared = false;
                 $has_snapshots = $server->hasSnapshots();
                 $has_disks = $server->hasEtvaServerLogicals();
                 $has_devs = $server->hasDevices();
                 $nodes_toassign_arr = array();
                 $nodes_toassign = $server->listNodesAssignTo();
                 foreach ($nodes_toassign as $i => $node) {
                     error_log("NodeAssignTo server id=" . $server->getId() . " name=" . $server->getName() . "id=" . $node->getId() . " name=" . $node->getName() . " per_res=" . $node->getper_res() . " per_mem=" . $node->getper_mem() . " per_cpu=" . $node->getper_cpu());
                     array_push($nodes_toassign_arr, $node->getId());
                 }
                 $srv_iconCls = $vm_is_running ? 'icon-vm-stat-ok' : 'icon-vm-stat-nok';
                 $join_cls_server = $cls_server . " " . $srv_iconCls;
                 # check if vm has etasp info
                 $ga_info = $server->getGaInfo();
                 $ga_obj = json_decode($ga_info);
                 $plone = $ga_obj->etasp ? 1 : 0;
                 $unassigned_servers[] = array('text' => $server->getName(), 'type' => 'server', 'id' => $child_id, 'node_id' => null, 'state' => $state_server, 'agent_tmpl' => $agent_tmpl, 'cls' => $join_cls_server, 'url' => $this->getController()->genUrl('server/view?id=' . $server->getID()), 'vm_state' => $vm_state, 'vm_is_running' => $vm_is_running, 'unassigned' => true, 'all_shared' => $all_shared, 'has_snapshots' => $has_snapshots, 'has_disks' => $has_disks, 'has_devices' => $has_devs, 'nodes_toassign' => $nodes_toassign_arr, 'leaf' => true, 'draggable' => $draggable, 'qtip' => $srv_qtip, 'ga_state' => $server->getGaState(), 'ga_info' => $server->getGaInfo(), 'plone' => $plone, 'contextmenu' => $perm_dc);
             }
         }
         $unassigned_node_name = $this->getContext()->getI18N()->__('unassigned');
         if (empty($unassigned_servers)) {
             if ($perm_dc) {
                 $aux[] = array('text' => $unassigned_node_name, 'type' => 'unassignednode', 'iconCls' => '', 'state' => 1, 'id' => 0, 'initialize' => 'ok', 'url' => $this->getController()->genUrl('node/viewUnassigned?cluster_id=' . $datacenter->getId()), 'cluster_id' => $datacenter->getId(), 'draggable' => false, 'children' => $unassigned_servers, 'expanded' => true, 'qtip' => '', 'cls' => 'x-tree-node-collapsed ', 'contextmenu' => $perm_dc);
             }
         } else {
             $aux[] = array('text' => $unassigned_node_name, 'type' => 'unassignednode', 'iconCls' => '', 'state' => 1, 'id' => 0, 'initialize' => 'ok', 'url' => $this->getController()->genUrl('node/viewUnassigned?cluster_id=' . $datacenter->getId()), 'cluster_id' => $datacenter->getId(), 'draggable' => false, 'children' => $unassigned_servers, 'qtip' => '', 'cls' => '', 'contextmenu' => $perm_dc);
         }
         //datacenter node
         if ($perm_dc || !empty($aux)) {
             $aux_datacenter[] = array('text' => $datacenter->getName(), 'type' => 'cluster', 'id' => "d" . $datacenter->getId(), 'singleClickExpand' => true, 'children' => $aux, 'contextmenu' => $show_cluster_contextmenu);
         }
     }
     return $aux_datacenter;
 }