Source for file actions.class.php
Documentation is available at actions.class.php
* @version SVN: $Id: actions.class.php 12474 2008-10-31 10:41:27Z fabien $
* Used when loading from left panel
* Displays node panel related stuff (node info | servers | network | storage)
//used to make soap requests to node VirtAgent
$this->node_id = $request->getParameter('id');
// used to build node grid dynamic
//used to build form to create new server with default values
$this->server_form = new EtvaServerForm();
// used to build server grid dynamic
$this->sfGuardGroup_tableMap = sfGuardGroupPeer::getTableMap();
* Triggered when clicking in 'storage tab'
$this->node = EtvaNodePeer::retrieveByPk($request->getParameter('id'));
* Used to create new node object
$isAjax = $request->isXmlHttpRequest();
if(!$isAjax) return $this->redirect('@homepage');
if(!$request->isMethod('post')){
$info = array('success'=> false,'errors'=> 'Wrong parameters');
$error = $this->setJsonError($info);
return $this->renderText($error);
$this->form = new EtvaNodeForm();
$error = $this->setJsonError($result);
return $this->renderText($error);
$this->getContext()->getResponse()->setHttpHeader("X-JSON", '()'); // set a header, (although it is empty, it is nicer than without a correct header. Filling the header with the result will not be parsed by extjs as far as I have seen).
return $this->renderText($result);
* Used to update a field node
$isAjax = $request->isXmlHttpRequest();
if(!$isAjax) return $this->redirect('@homepage');
if(!$request->isMethod('post') && !$request->isMethod('put')){
$info = array('success'=> false,'errors'=> 'Wrong parameters');
$error = $this->setJsonError($info);
return $this->renderText($error);
if(!$etva_node = EtvaNodePeer::retrieveByPk($request->getParameter('id'))){
$error_msg = sprintf('Object etva_node does not exist (%s).', $request->getParameter('id'));
$info = array('success'=> false,'errors'=> $error_msg);
$error = $this->setJsonError($info);
return $this->renderText($error);
$etva_node->setByName($request->getParameter('field'), $request->getParameter('value'));
$result = array('success'=> true);
$this->getResponse()->setHttpHeader("X-JSON", '()'); // set a header, (although it is empty, it is nicer than without a correct header. Filling the header with the result will not be parsed by extjs as far as I have seen).
return $this->renderText($result);
* Used to update a field node
$isAjax = $request->isXmlHttpRequest();
if(!$isAjax) return $this->redirect('@homepage');
if(!$etva_node = EtvaNodePeer::retrieveByPk($request->getParameter('id'))){
$error_msg = sprintf('Object etva_node does not exist (%s).', $request->getParameter('id'));
$info = array('success'=> false,'errors'=> $error_msg);
$error = $this->setJsonError($info);
return $this->renderText($error);
$result = array('success'=> true);
$this->getResponse()->setHttpHeader("X-JSON", '()'); // set a header, (although it is empty, it is nicer than without a correct header. Filling the header with the result will not be parsed by extjs as far as I have seen).
return $this->renderText($result);
* Used to show node grid info
* Returns: array(total=>1,data=>node info)
$isAjax = $request->isXmlHttpRequest();
if(!$isAjax) return $this->redirect('@homepage');
$this->etva_node = EtvaNodePeer::retrieveByPk($request->getParameter('id'));
$elements[] = $this->etva_node->toArray();
$final = array('total' => count($elements),'data' => $elements);
$this->getResponse()->setHttpHeader("X-JSON", '()'); // set a header, (although it is empty, it is nicer than without a correct header. Filling the header with the result will not be parsed by extjs as far as I have seen).
return $this->renderText($result);
* Returns lists all nodes for grid with pager
$isAjax = $request->isXmlHttpRequest();
if(!$isAjax) return $this->redirect('@homepage');
$limit = $this->getRequestParameter('limit', 10);
$page = floor($this->getRequestParameter('start', 0) / $limit)+ 1;
$this->pager = new sfPropelPager('EtvaNode', $limit);
$this->pager->setCriteria($c);
$this->pager->setPage($page);
$this->pager->setPeerMethod('doSelect');
$this->pager->setPeerCountMethod('doCount');
foreach($this->pager->getResults() as $item)
$elements[] = $item->toArray();
'total' => $this->pager->getNbResults(),
$this->getResponse()->setHttpHeader("X-JSON", '()'); // set a header, (although it is empty, it is nicer than without a correct header. Filling the header with the result will not be parsed by extjs as far as I have seen).
return $this->renderText($result);
if ($this->getRequestParameter('sort')== '') return;
$column = EtvaNodePeer::translateFieldName(sfInflector::camelize($this->getRequestParameter('sort')), BasePeer::TYPE_PHPNAME, BasePeer::TYPE_COLNAME);
if ('asc' == strtolower($this->getRequestParameter('dir')))
$criteria->addAscendingOrderByColumn($column);
$criteria->addDescendingOrderByColumn($column);
* Executes requests for all nodes ('broadcast' messages)
foreach($node_list as $etva_node){
$request->setParameter('id', $etva_node->getId());
$this->node = EtvaNodePeer::retrieveByPk($request->getParameter('id'));
$error = 'Error: no virt agent found'. "\n";
$this->getResponse()->setStatusCode(400);
// $this->getResponse()->setHttpHeader('Status', '404 Not Found');
// $error = json_encode(array('error'=>'da'));
return $this->renderText($error);
$addr = $this->node->getIP();
$port = $this->node->getPort();
$host = "" . $proto . "://" . $addr . ":" . $port;
//$soap = new SOAP_Client($host,false,$port);
$method = $this->getRequestParameter('method');
$params = ($this->getRequestParameter('params'))?
json_decode($this->getRequestParameter('params'),true) : array("nil"=> "true");
$response = $soap->processSoap($method, $params);
if (is_a($response, 'PEAR_Error')) {
$error = 'Error: ' . $response->getMessage() . "\n";
$error .= 'Error: ' . $response->getDetail() . "\n";
$params_string = array();
foreach ($params as $key => $value)
$params_string[] = $key . " = ". $value;
$error .= "(". implode(',',$params_string). ")". "\n";
$this->getResponse()->setStatusCode(400);
return $this->renderText($error);
$opt = $this->getRequestParameter('opt');
// ex: method=getlvs&opt=tree
$call_ = substr($method,3,$tam);
$func_call = 'generate'. $call_. 'Tree';
case 'vgs' : $pvs = $soap->call('getpvs',$params);
$return = $this->$func_call($response,$pvs);
default: $return = $this->$func_call($response);
// ex: method=getlvs&opt=q
// calls generatelvsQuery
$query = $this->getRequestParameter('query');
$call_ = substr($method,3,$tam);
$func_call = 'generate'. $call_. 'Query';
$return = $this->$func_call($response,$query);
// $tam = strlen($method);
// $call_ = substr($method,3,$tam);
$func_call = 'update_'. $method;
$return = $this->$func_call($this->node,$response);
// $ret = $this->generateTree($ret);
$query = $this->getRequestParameter('q');
$call_ = substr($method,3,$tam);
$func_call = 'generate'. $call_. 'List';
$return = $this->$func_call($response,$query);
$this->getResponse()->setHttpHeader("X-JSON", '()');
else $this->getContext()->getResponse()->setContentType('text/xml;');
return $this->renderText($return);
foreach ($list as $elem=> $props){
foreach ($props as $tag=> $item){
$qtip = 'Physical volume NOT initialized';
$pretty_size = $item->pretty_size;
$pretty_pvsize = $item->pretty_pvsize;
if($item->pvinit){ $qtip = 'Physical volume initialized';
$children[] = array('id'=> $id,'uiProvider'=> 'col','iconCls'=> 'task','cls'=> $cls,'text'=> $tag,'size'=> $size,'prettysize'=> $pretty_size,'pvsize'=> $pvsize,'pretty-pvsize'=> $pretty_pvsize, 'singleClickExpand'=> true,'type'=> $type,'qtip'=> $qtip,'leaf'=> true);
$aux[] = array('id'=> $elem,'uiProvider'=> 'col','iconCls'=> 'devices-folder','text'=> $elem, 'singleClickExpand'=> true,'children'=> $children);
// $local_devs = $list->local;
// foreach ($local_devs as $elem=>$props){
// $qtip = 'Physical volume NOT initialized';
// $type = $cls = 'dev-pd';
// if(isset($props->pvinit))
// if($props->pvinit){ $qtip = 'Physical volume initialized';
// foreach ($props as $prop){
// // $size = $prop['size'];
//// foreach ($props as $prop=>$value){
//// if($prop=='device') $id = $value;
//// if($prop=='pvinit'){
//// $qtip = 'Physical volume initialized';
//// $aux_[] = array('text'=>$prop,'leaf'=>true);
// // $aux_[] = array('text'=>$prop,'id'=>$child_id,'url'=> $this->getController()->genUrl('server/view?id='.$server->getID()),
// // iconCls:'task-folder',
//$aux[] = array('id'=>$id,'uiProvider'=>'col','iconCls'=>'task','cls'=>$cls,'text'=>$elem,'size'=>$size, 'singleClickExpand'=>true,'type'=>$type,'qtip'=>$qtip,'leaf'=>true);
// $aux[] = array('id'=>$id,'cls'=>$cls,'text'=>$elem,'size'=>$size, 'singleClickExpand'=>true,'type'=>$type,'qtip'=>$qtip,'children'=>$aux_);
// $aux[] = array('text'=>$node->getName(),'id'=>$node->getID(),'url'=>$this->getController()->genUrl('node/view?id='.$node->getID()),
// 'children'=>$aux_servers,'expanded'=>true,'cls'=> 'x-tree-node-collapsed');
// }else $aux[] = array('text'=>$node->getName(),'id'=>$node->getID(),'url'=>$this->getController()->genUrl('node/view?id='.$node->getID()),
// 'singleClickExpand'=>true,'children'=>$aux_servers);
foreach ($list as $elem=> $props){
$pvs_list = $props->physicalvolumes;
// foreach ($props as $prop=>$value){
// if($prop=='vg') $id = $value;
// $qtip = 'Size:'.$value;
// $aux_[] = array('text'=>$prop,'leaf'=>true);
// // $aux_[] = array('text'=>$prop,'id'=>$child_id,'url'=> $this->getController()->genUrl('server/view?id='.$server->getID()),
// $pvs_tree = $this->generatepvsTree($pvsl,$id);
foreach($pvs_tree as $pvitem){
//$aux_[] = array_merge($aux,);
// $aux_[] = array('id'=>'toto','cls'=>$cls,'text'=>'elem','singleClickExpand'=>true,'type'=>'vg','qtip'=>$qtip,'children'=>$tt);
// $aux[] = array('id'=>$id,'cls'=>$cls,'text'=>$elem,'expanded'=> true,'singleClickExpand'=>true,'type'=>'vg','qtip'=>$qtip,'children'=>$aux_);
$aux[] = array('id'=> $id,'uiProvider'=> 'col','iconCls'=> 'task','cls'=> $cls,'text'=> $elem,'size'=> $size, 'singleClickExpand'=> true,'type'=> $type,'qtip'=> $qtip,'leaf'=> true);
foreach ($list as $elem=> $props){
foreach ($props as $prop=> $value){
if($prop== 'vg' && $value== $vg_filter) $match = 1; // pv belogns to the vg_filter group
if($prop== 'pv') $id = $value; // setting id
$qtip[] = 'Total size:'. $value;
$qtip[] = 'Free size:'. $value;
$aux_[] = array('text'=> $prop,'leaf'=> true);
// $aux_[] = array('text'=>$prop,'id'=>$child_id,'url'=> $this->getController()->genUrl('server/view?id='.$server->getID()),
$aux[] = array('id'=> $id,'cls'=> $cls,'text'=> $elem,'singleClickExpand'=> true,'type'=> 'dev-pv','qtip'=> $qtip,'children'=> $aux_);
// $aux_it[0] = array('id'=>'toto','cls'=>$cls,'text'=>'elem','singleClickExpand'=>true,'type'=>'vg','qtip'=>$qtip,'children'=>$tt);
foreach ($list as $elem=> $props){
$pretty_size = $props->pretty_size;
// foreach ($props as $prop=>$value){
// if($prop=='pv') $id = $value; // setting id
// $qtip[] = 'Total size:'.$value;
// $qtip[] = 'Free size:'.$value;
// $aux_[] = array('text'=>$prop,'leaf'=>true);
// // $aux_[] = array('text'=>$prop,'id'=>$child_id,'url'=> $this->getController()->genUrl('server/view?id='.$server->getID()),
// $qtip = implode("<br>",$qtip);
$aux[] = array('id'=> $id,'cls'=> $cls,'uiProvider'=> 'col','iconCls'=> 'task','text'=> $elem,'size'=> $size,'prettysize'=> $pretty_size,'singleClickExpand'=> true,'type'=> 'dev-pv','qtip'=> $qtip,'leaf'=> true);
// $aux_it[0] = array('id'=>'toto','cls'=>$cls,'text'=>'elem','singleClickExpand'=>true,'type'=>'vg','qtip'=>$qtip,'children'=>$tt);
foreach ($list as $elem=> $props){
if(!isset ($props->$query))
$elements[] = array('value'=> $props->device,'name'=> $elem);
$result = array('total' => count($elements),'data' => $elements);
foreach ($list as $elem=> $props){
$size = $props->freesize;
// $size = Etva::byte_to_MBconvert($size);
$elements[] = array('id'=> $props->vg,'txt'=> $elem,'size'=> $size);
$result = array('total' => count($elements),'data' => $elements);
foreach ($list as $elem=> $props){
$pretty_size = $props->pretty_size;
$pvsList = $props->physicalvolumes;
// $aux_[] = array('id'=>'toto','cls'=>$cls,'text'=>'elem','singleClickExpand'=>true,'type'=>'vg','qtip'=>$qtip,'children'=>$tt);
// $aux[] = array('id'=>$id,'cls'=>$cls,'text'=>$elem,'expanded'=> true,'singleClickExpand'=>true,'type'=>'vg','qtip'=>$qtip,'children'=>$aux_);
$aux[] = array('id'=> $id,'uiProvider'=> 'col','iconCls'=> 'devices-folder','cls'=> $cls,'text'=> $elem,'type'=> 'vg','size'=> $size,'prettysize'=> $pretty_size, 'singleClickExpand'=> true,'qtip'=> $qtip,'children'=> $pvs_tree);
foreach ($list as $elem=> $props){
$pretty_size = $props->lsize;
$vgfreesize = $props->vgfreesize;
$vg_size = $props->vgsize;
$aux[] = array('id'=> $id,'cls'=> $cls,'uiProvider'=> 'col','iconCls'=> 'devices-folder','text'=> $elem,'size'=> $size,'prettysize'=> $pretty_size,'vgsize'=> $vg_size,'singleClickExpand'=> true,'type'=> 'lv','vg'=> $vg,'vgfreesize'=> $vgfreesize,'leaf'=> true);
// $aux_it[0] = array('id'=>'toto','cls'=>$cls,'text'=>'elem','singleClickExpand'=>true,'type'=>'vg','qtip'=>$qtip,'children'=>$tt);
foreach ($list as $elem=> $props){
// $size = Etva::byte_to_MBconvert($size);
$elements[] = array('id'=> $props->lvdevice,'txt'=> $elem,'size'=> $size);
$result = array('total' => count($elements),'data' => $elements);
// $this->request->setParameter('uid', $node_uid);
// $this->request->setParameter('vms',$vms);
// $this->executeUpdate($etva_node, $vms);
// $this->forward('server', 'update');
$action = sfContext::getInstance()->getController()->getAction('server','update');
$result = $action->executeUpdate($node,$vms);
if(SF_ENVIRONMENT == 'soap'){
// 'uid'=>'e93927a5-05e4-4ed6-a0bb-8c0268e1096c',
// $this->request->setParameter('etva_node', $array);
// Check if already initialized
$this->form = new EtvaNodeForm();
$params = $request->getParameter($this->form->getName());
// $request->getParameterHolder()->remove('etva_node');
// $request->setParameter('etva_node', $etva_node->getId());
$params['id'] = $etva_node->getId();
$request->getParameterHolder()->set($this->form->getName(),$params);
$this->form = new EtvaNodeForm($etva_node);
if(SF_ENVIRONMENT == 'soap'){
$error_msg = sprintf('Object etva_node does not exist (%s).', $request->getParameter('uid'));
$error = array('success'=> false,'errors'=> $error_msg);
$etva_node->setByName($request->getParameter('field'), $request->getParameter('value'),BasePeer::TYPE_FIELDNAME);
$result = array('success'=> true);
// die(print_r($request));
$form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
// die($form->getName());
$etva_node = $form->save();
// $request->getParameterHolder()->remove('etva_node');
// $request->setParameter('id', $etva_node->getId());
// $request->setParameter('method', 'list_vms');
// $this->executeGetSoap($request);
$result = array('success'=> true,'insert_id'=> $etva_node->getId());
foreach ($form->getErrorSchema() as $field => $error)
$errors[$field] = $error->getMessage();
$result = array('success'=> false,'errors'=> $errors);
private function setJsonError($info,$statusCode = 400){
$this->getContext()->getResponse()->setStatusCode($statusCode);
$this->getContext()->getResponse()->setHttpHeader("X-JSON", '()');
|