예제 #1
0
 public function executeJsonGridNoPager($request)
 {
     $isAjax = $request->isXmlHttpRequest();
     if (!$isAjax) {
         return $this->redirect('@homepage');
     }
     $sid = $this->getRequestParameter('sid');
     if ($sid) {
         $server = EtvaServerPeer::retrieveByPK($sid);
         $cid = $server->getClusterId();
     } else {
         // get cluster id
         $cid = $this->getRequestParameter('cid');
         if (!$cid) {
             $etva_cluster = EtvaClusterPeer::retrieveDefaultCluster();
             $cid = $etva_cluster->getId();
         }
     }
     //Get networks from cluster
     $c_vlan = new Criteria();
     $c_vlan->add(EtvaVlanPeer::CLUSTER_ID, $cid);
     $etva_vlans = EtvaVlanPeer::doSelect($c_vlan);
     //get networks with server
     $c = new Criteria();
     $vlan_flag = false;
     $server_flag = false;
     $query = $this->getRequestParameter('query') ? json_decode($this->getRequestParameter('query'), true) : array();
     foreach ($query as $key => $val) {
         $column = EtvaNetworkPeer::translateFieldName(sfInflector::camelize($key), BasePeer::TYPE_PHPNAME, BasePeer::TYPE_COLNAME);
         if ($key == 'vlan_id') {
             $vlan_flag = true;
         }
         if ($key == 'server_id') {
             $server_flag = true;
         }
         $c->add($column, $val);
     }
     //error_log($c->toString());
     //get vlans from cluster
     if (!$vlan_flag && !$server_flag) {
         // && !$server_flag && $cid){
         //error_log('!(!$vlan_flag && !$server_flag)');
         foreach ($etva_vlans as $etva_vlan) {
             if ($this->getRequestParameter('query')) {
                 $c->addOr(EtvaNetworkPeer::VLAN_ID, $etva_vlan->getId());
             } else {
                 $c->addAnd(EtvaNetworkPeer::VLAN_ID, $etva_vlan->getId());
             }
         }
     }
     // add sort criteria to sort elements
     $this->addSortCriteria($c);
     // add server criteria
     $this->addServerCriteria($c);
     //error_log($c->toString());
     $etva_network_list = EtvaNetworkPeer::doSelectJoinEtvaServer($c);
     $elements = array();
     $i = 0;
     foreach ($etva_network_list as $item) {
         $etva_server = $item->getEtvaServer();
         $etva_vlan = $item->getEtvaVlan();
         if ($etva_server && $etva_vlan) {
             $etva_server_name = $etva_server->getName();
             $etva_server_type = $etva_server->getVmType();
             $etva_vm_state = $etva_server->getVmState();
             $etva_vlan_name = $etva_vlan->getName();
             $elements[$i] = $item->toArray();
             $elements[$i]['ServerName'] = $etva_server_name;
             $elements[$i]['VmType'] = $etva_server_type;
             $elements[$i]['Vlan'] = $etva_vlan_name;
             $elements[$i]['Vm_state'] = $etva_vm_state;
             $etva_node = $etva_server->getEtvaNode();
             if ($etva_node) {
                 $etva_node_name = $etva_node->getName();
                 $elements[$i]['NodeName'] = $etva_node_name;
                 $elements[$i]['NodeId'] = $etva_node->getId();
             }
             $i++;
         }
     }
     $final = array('total' => count($etva_network_list), 'data' => $elements);
     $result = json_encode($final);
     $this->getResponse()->setHttpHeader('Content-type', 'application/json');
     return $this->renderText($result);
 }
예제 #2
0
 /**
  * Used to process soap requests => updateVirtAgentVlans
  *
  * Updates vlan info sent by virt Agent
  *
  * Replies with succcess
  *
  * $request may contain the following keys:
  * - uid: uid (virtAgent sending request uid)
  * - vlans (object containing vlans info)
  * @return array array(new vlans)
  */
 public function executeSoapUpdate(sfWebRequest $request)
 {
     if (sfConfig::get('sf_environment') == 'soap') {
         //get config data file
         $etva_data = Etva::getEtvaModelFile();
         //check etva model type
         $etvamodel = $etva_data['model'];
         $vlans = $request->getParameter('vlans');
         $vlans_names = array();
         foreach ($vlans as $vlanInfo) {
             $vlan_data = (array) $vlanInfo;
             $vlans_names[] = $vlan_data['name'];
         }
         $c = new Criteria();
         $c->add(EtvaNodePeer::UUID, $request->getParameter('uuid'));
         if (!($etva_node = EtvaNodePeer::doSelectOne($c))) {
             $error_msg = sprintf('Object etva_node does not exist (%s).', $request->getParameter('uuid'));
             $node_log = Etva::getLogMessage(array('name' => $request->getParameter('uuid')), EtvaNodePeer::_ERR_NOTFOUND_UUID_);
             //notify system log
             $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => Etva::getLogMessage(array('info' => $node_log), EtvaVlanPeer::_ERR_SOAPUPDATE_), 'priority' => EtvaEventLogger::ERR)));
             $error = array('success' => false, 'error' => $error_msg);
             return $error;
         }
         $node_initialize = $etva_node->getInitialize();
         if ($node_initialize != EtvaNode_VA::INITIALIZE_OK) {
             $error_msg = sprintf('Etva node initialize status: %s', $node_initialize);
             $error = array('success' => false, 'error' => $error_msg);
             return $error;
         }
         /*
          * checks if CM vlans exists on node info Vlans
          * return vlans to be created on node
          *
          */
         // filter results by cluster
         $vlan_criteria = new Criteria();
         $vlan_criteria->add(EtvaVlanPeer::CLUSTER_ID, $etva_node->getClusterId());
         $etva_vlans = EtvaVlanPeer::doSelect($vlan_criteria);
         $new_vlans = array();
         foreach ($etva_vlans as $etva_vlan) {
             if (!in_array($etva_vlan->getName(), $vlans_names)) {
                 $data = array('name' => $etva_vlan->getName(), 'ifout' => $etva_vlan->getIntf());
                 /*
                  * if model type == enterprise send vlan ID and untagged/tagged option
                  */
                 if (strtolower($etvamodel) != 'standard') {
                     $data['vlanid'] = $etva_vlan->getVlanId();
                     $tagged = $etva_vlan->getTagged();
                     if ($tagged) {
                         $data['vlan_tagged'] = 1;
                     } else {
                         $data['vlan_untagged'] = 1;
                     }
                 }
                 $new_vlans[$etva_vlan->getName()] = $data;
             }
         }
         $vlans_names = array_keys($new_vlans);
         $vlans = implode(', ', $vlans_names);
         //notify system log
         $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => Etva::getLogMessage(array('name' => $etva_node->getName(), 'info' => $vlans), EtvaVlanPeer::_OK_SOAPUPDATE_), 'priority' => EtvaEventLogger::INFO)));
         return $new_vlans;
     }
     // end soap request
 }