private static function ElectNode(EtvaNode $etva_node) { $cluster_id = $etva_node->getClusterId(); $etva_cluster = EtvaClusterPeer::retrieveByPK($cluster_id); return EtvaNode::getFirstActiveNode($etva_cluster); }
public function executeJsonUpdate(sfWebRequest $request) { // create cluster entry $id = $request->getParameter('id'); $cluster = EtvaClusterPeer::retrieveByPK($id); if (!$cluster) { $error_msg = sprintf('Object etva_cluster does not exist (%s).', $request->getParameter('id')); $info = array('success' => false, 'error' => $error_msg); $error = $this->setJsonError($info); return $this->renderText($error); } /*if(!$cluster) $form = new EtvaClusterForm(); else $form = new EtvaClusterForm($cluster); $result = $this->processJsonForm($request, $form); if(!$result['success']){ $error = $this->setJsonError($result); return $this->renderText($error); } //get cluster object $etva_cluster = $result['object'];*/ $form_data = (array) json_decode($request->getParameter('etva_cluster')); $clustername = $form_data['name']; if (!preg_match('/^[a-zA-Z][a-zA-Z0-9\\-\\_]+$/', $clustername)) { $msg = "Invalid name format"; error_log("CLUSTER[ERROR]" . $msg); $msg_i18n = $this->getContext()->getI18N()->__($msg); $error_msg = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n); //notify system log $this->dispatcher->notify(new sfEvent($error['agent'], 'event.log', array('message' => Etva::getLogMessage(array('name' => $clustername, 'info' => $msg), EtvaClusterPeer::_ERR_CREATE_), 'priority' => EtvaEventLogger::ERR))); $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'info' => $msg_i18n, 'error' => array($error_msg)); // 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); } $cluster->setName($clustername); $cluster->setIsDefaultCluster(0); if ($form_data['isDefaultCluster']) { $updatecluster = array('Isdefaultcluster' => 0); EtvaClusterQuery::create()->update($updatecluster); $cluster->setIsDefaultCluster(1); } $cluster->setHasNodeHA($form_data['hasNodeHA'] ? 1 : 0); $cluster->setAdmissionGateType($form_data['admissionGate_type']); $cluster->setAdmissionGateValue($form_data['admissionGate_value']); $cluster->save(); $etva_cluster = $cluster; $updateNodes = array('Issparenode' => 0); if ($request->getParameter('fencingconf')) { $fencingconf = $request->getParameter('fencingconf'); $updateNodes['Fencingconf'] = $fencingconf; } //clear spare node EtvaNodeQuery::create()->filterByClusterId($etva_cluster->getId())->update($updateNodes); if ($sparenode_id = $request->getParameter('sparenode')) { if ($etva_sparenode = EtvaNodePeer::retrieveByPK($sparenode_id)) { // and mark the spare node $etva_sparenode->setIsSpareNode(1); $etva_sparenode->save(); } } $name = $etva_cluster->getName(); $i18n_msg = $msg_i18n = $this->getContext()->getI18N()->__(EtvaClusterPeer::_OK_UPDATE_, array('%name%' => $name)); //notify system log $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => Etva::getLogMessage(array('name' => $name), EtvaClusterPeer::_OK_UPDATE_)))); $return = array('success' => true, 'agent' => sfConfig::get('config_acronym'), 'response' => $i18n_msg, 'cluster_id' => $etva_cluster->getId()); $return = json_encode($return); $this->getResponse()->setHttpHeader('Content-type', 'application/json'); return $this->renderText($return); }
public function executeJsonListCluster(sfWebRequest $request) { $filterBy = ''; if ($request->hasParameter('sid')) { $filterBy = 'sid'; } if ($request->hasParameter('cid')) { $filterBy = 'cid'; } $cluster_nodes = array(); $criteria = new Criteria(); if ($request->hasParameter('initialize')) { // filter by initialized nodes only $criteria->add(EtvaNodePeer::INITIALIZE, 'ok', Criteria::EQUAL); } switch ($filterBy) { case 'sid': $value = $request->getParameter($filterBy); $server = EtvaServerPeer::retrieveByPK($value); $node = $server->getEtvaNode(); $criteria->add(EtvaNodePeer::ID, $node->getId(), Criteria::NOT_EQUAL); $cluster_nodes = $node->getNodesCluster($criteria); break; case 'cid': $value = $request->getParameter($filterBy); if ($cluster = EtvaClusterPeer::retrieveByPK($value)) { $criteria->add(EtvaNodePeer::CLUSTER_ID, $cluster->getId()); $cluster_nodes = EtvaNodePeer::doSelect($criteria); } break; default: $cluster_nodes = EtvaNodePeer::doSelect($criteria); break; } $elements = array(); foreach ($cluster_nodes as $node) { $node_array = $node->toArray(); // get max allocatable memory $node_array['maxmem'] = $node->getMaxmem(); $elements[] = $node_array; } $result = array('success' => true, 'total' => count($elements), 'data' => $elements); $return = json_encode($result); if (sfConfig::get('sf_environment') == 'soap') { return $return; } $this->getResponse()->setHttpHeader('Content-type', 'application/json'); return $this->renderText($return); }
public function executeJsonListAllocatable(sfWebRequest $request) { $elements = array(); //adding cluster id filter $cid = $request->getParameter('cid'); $nid = $request->getParameter('nid'); $level = $request->getParameter('level'); if (!$level) { $level = 'node'; } //get the $filter = json_decode($request->getParameter('filter'), true); $criteria = new Criteria(); $criteria->add(EtvaPhysicalvolumePeer::ALLOCATABLE, 1); $criteria->add(EtvaPhysicalvolumePeer::PVINIT, 1); foreach ($filter as $field => $value) { $column = EtvaPhysicalvolumePeer::translateFieldName(sfInflector::camelize($field), BasePeer::TYPE_PHPNAME, BasePeer::TYPE_COLNAME); $criteria->add($column, $value); } if ($level == 'cluster') { $etva_cluster = EtvaClusterPeer::retrieveByPK($cid); $etva_pvs = $etva_cluster->getEtvaPhysicalvolumes($criteria); } elseif ($level == 'node') { $etva_node = EtvaNodePeer::retrieveByPK($nid); $etva_pvs = $etva_node->getEtvaNodePhysicalVolumesJoinEtvaPhysicalvolume($criteria); } else { return; } if (!$etva_pvs) { $msg_i18n = $this->getContext()->getI18N()->__(EtvaPhysicalvolumePeer::_NONE_AVAILABLE_); $info = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'info' => $msg_i18n, 'error' => $msg_i18n); if (sfConfig::get('sf_environment') == 'soap') { return json_encode($info); } $error = $this->setJsonError($info); return $this->renderText($error); } if (sfConfig::get('sf_environment') == 'soap') { foreach ($etva_pvs as $elem) { $etva_pv = $elem->getEtvaPhysicalVolume(); $uuid = $etva_pv->getUuid(); $id = $etva_pv->getId(); $name = $etva_pv->getName(); $pv = $etva_pv->getPv(); $elements[$id] = array('id' => $id, 'pv' => $pv, 'name' => $name, 'uuid' => $uuid); } } else { foreach ($etva_pvs as $elem) { if ($level == 'node') { $etva_pv = $elem->getEtvaPhysicalVolume(); } elseif ($level == 'cluster') { $etva_pv = $elem; } $uuid = $etva_pv->getUuid(); $id = $etva_pv->getId(); $name = $etva_pv->getName(); $pv = $etva_pv->getPv(); $elements[] = array('id' => $id, 'pv' => $pv, 'name' => $name, 'uuid' => $uuid); } } $result = array('success' => true, 'total' => count($elements), 'response' => $elements); $return = json_encode($result); if (sfConfig::get('sf_environment') == 'soap') { return $return; } $this->getResponse()->setHttpHeader('Content-type', 'application/json'); return $this->renderText($return); }