centralM
[ class tree: centralM ] [ index: centralM ] [ all elements ]

Source for file actions.class.php

Documentation is available at actions.class.php

  1. <?php
  2.  
  3. /**
  4.  * logicalvol actions.
  5.  *
  6.  * @package    centralM
  7.  * @subpackage logicalvol
  8.  * @author     Your name here
  9.  * @version    SVN: $Id: actions.class.php 12474 2008-10-31 10:41:27Z fabien $
  10.  */
  11. class logicalvolActions extends sfActions
  12. {
  13.   
  14.   /*
  15.    * Creates a logical volume
  16.    * Params: array lv (mapping to db phpnames)
  17.    * Return json array lv
  18.    */
  19.   public function executeJsonCreate(sfWebRequest $request)
  20.   {
  21.  
  22.         /*
  23.          * Decode lv object and map it to array 
  24.          */
  25.         $lv json_decode($request->getParameter('lv'),true);
  26.         
  27.         $node_id $lv['NodeId'];
  28.  
  29.         /*
  30.          * Gets volume group ID giving volume group name and node id
  31.          */
  32.         $vgname $lv['VolumegroupName'];
  33.         unset($lv['VolumegroupName']);
  34.         
  35.         $c new Criteria();
  36.  
  37.         $c->add(EtvaVolumegroupPeer::NODE_ID$node_id);
  38.         $c->add(EtvaVolumegroupPeer::VG$vgname);
  39.  
  40.         $etva_vg EtvaVolumegroupPeer::doSelectOne($c);
  41.  
  42.         $vg_id $etva_vg->getId();
  43.  
  44.         /*
  45.          * sets vg id for the lv to created
  46.          */
  47.         $lv['VolumegroupId'$vg_id;
  48.  
  49.         /*
  50.          * updates volumegroup free size
  51.          */
  52.         $vg_freesize $lv['VolumegroupFreesize'];
  53.         unset($lv['VolumegroupFreesize']);
  54.  
  55.         $etva_vg->setFreesize($vg_freesize);
  56.  
  57.  
  58.         $etva_lv new EtvaLogicalvolume();
  59.  
  60.         $etva_lv->fromArray($lv);
  61.         
  62.        // $etva_vg = $etva_lv->getEtvaVolumegroup();
  63.     
  64.         
  65.         $etva_lv->save();
  66.  
  67.  
  68.         $result array('success'=>true,'object'=>$etva_lv->toArray());
  69.         $result json_encode($result);
  70.  
  71.         $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).
  72.  
  73.         return $this->renderText($result);
  74.   }
  75.  
  76.  
  77.    /*
  78.    * Remove the logical volume
  79.    * Params: device, nid (virtAgent node ID)  
  80.    *
  81.    */
  82.   public function executeJsonDelete(sfWebRequest $request)
  83.   {
  84.         $isAjax $request->isXmlHttpRequest();
  85.  
  86.         if(!$isAjaxreturn $this->redirect('@homepage');
  87.  
  88.         $criteria new Criteria();
  89.         $criteria->add(EtvaLogicalvolumePeer::NODE_ID,$request->getParameter('nid'));
  90.         if(!$etva_lv EtvaLogicalvolumePeer::retrieveByLvDevice($request->getParameter('lvdev'),$criteria)){
  91.             $error_msg sprintf('Object etvalogicalvolume does not exist (%s).'$request->getParameter('lvdev'));
  92.             $info array('success'=>false,'errors'=>$error_msg);
  93.             $error $this->setJsonError($info);
  94.             return $this->renderText($error);
  95.         }
  96.  
  97.         /*
  98.          * updates volume group free size on delete
  99.          */
  100.  
  101.         $etva_vg $etva_lv->getEtvaVolumegroup();
  102.         $etva_vg->setFreesize($request->getParameter('vgfreesize'));
  103.         $etva_vg->save();
  104.  
  105.         $etva_lv->delete();
  106.  
  107.         $result array('success'=>true);
  108.         $result json_encode($result);
  109.         $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).
  110.         return $this->renderText($result);
  111.   }
  112.  
  113.  
  114.  
  115.   /*
  116.    * Updates logical volume info
  117.    * Params: array lv (mapping to db phpnames)
  118.    * return array success
  119.    *
  120.    */
  121.   public function executeJsonUpdate(sfWebRequest $request)
  122.   {
  123.     $isAjax $request->isXmlHttpRequest();
  124.  
  125.     $lv ($request->getParameter('lv'))json_decode($request->getParameter('lv'),truearray();
  126.     
  127.     $node_id $lv['NodeId'];
  128.  
  129.     $c new Criteria();
  130.     $c->add(EtvaLogicalvolumePeer::NODE_ID$node_id);
  131.  
  132.     // retrieve lv by node id and lvdevice
  133.     if(!$etva_lv EtvaLogicalvolumePeer::retrieveByLvDevice($lv['Lvdevice']$c)){
  134.         $error_msg sprintf('Object etva_logicalvol does not exist (%s).'$lv['Lvdevice']);
  135.         $info array('success'=>false,'errors'=>$error_msg);
  136.         $error $this->setJsonError($info);
  137.         return $this->renderText($error);
  138.     }
  139.  
  140.     
  141.  
  142.     $etva_lv->fromArray($lv);
  143.  
  144.     /*
  145.      * If vgfreesize is set to update then retrieve vg info and update it
  146.      */
  147.     if(isset($lv['VgFreesize'])){
  148.         $vg_freesize $lv['VgFreesize'];
  149.         $etva_vg $etva_lv->getEtvaVolumegroup();
  150.         $etva_vg->setFreesize($vg_freesize);
  151.     }
  152.     
  153.  
  154.     if($etva_lv->validate()){
  155.         $etva_lv->save();
  156.         $result array('success'=>true,'object'=>$etva_lv->toArray());
  157.  
  158.     }else{
  159.         
  160.         $info array('success'=>false,'errors'=>'Not valid');
  161.         $error $this->setJsonError($info);
  162.         return $this->renderText($error);
  163.  
  164.         }
  165.  
  166.  
  167.     $result json_encode($result);
  168.     $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).
  169.     return $this->renderText($result);
  170.  
  171.   }
  172.  
  173.  
  174.   /*
  175.    * Params: nid (virtAgent node ID)
  176.    * Used to return pre-formatted data for tree-column extjs
  177.    */
  178.   public function executeJsonLvsTree(sfWebRequest $request)
  179.   {
  180.     $criteria new Criteria();
  181.     $criteria->add(EtvaLogicalvolumePeer::NODE_ID,$request->getParameter('nid'));
  182.  
  183.     // retrieves array logical volumes with node ID containing vg info
  184.     $list EtvaLogicalvolumePeer::doSelectJoinEtvaVolumegroup($criteria);
  185.  
  186.     $aux array();
  187.  
  188.     foreach ($list as $elem){
  189.  
  190.         
  191.         $etva_vg $elem->getEtvaVolumegroup();
  192.         //check data consistency....should be fine
  193.         if($etva_vg){
  194.             $id $elem->getLv();
  195.             $pretty_size $elem->getSize();
  196.             $size $elem->getSize();
  197.  
  198.             $vg $etva_vg->getVg();
  199.             $vg_size $etva_vg->getSize();
  200.             $vg_freesize $etva_vg->getFreesize();
  201.             $cls 'lv';
  202.             $aux[array('id'=>$id,'cls'=>$cls,'uiProvider'=>'col','iconCls'=>'devices-folder','text'=>$id,'size'=>$size,'prettysize'=>$pretty_size,'vgsize'=>$vg_size,'singleClickExpand'=>true,'type'=>'lv','vg'=>$vg,'vgfreesize'=>$vg_freesize,'leaf'=>true);
  203.         }
  204.  
  205.     }
  206.  
  207.     $return json_encode($aux);
  208.     $this->getResponse()->setHttpHeader("X-JSON"'()');
  209.  
  210.  
  211.     return $this->renderText($return);
  212.       
  213.   }
  214.  
  215.   /*
  216.    * Params: nid (virtAgent node ID)
  217.    * Returns lvs with writeable==1 AND in_use == 0
  218.    * Returns pre-formated data for Extjs combo with lvs available
  219.    */
  220.   public function executeJsonGetAvailable(sfWebRequest $request)
  221.   {
  222.  
  223.     $isAjax $request->isXmlHttpRequest();
  224.  
  225.     if(!$isAjaxreturn $this->redirect('@homepage');
  226.  
  227.     $criteria new Criteria();
  228.  
  229.     $criteria->add(EtvaLogicalvolumePeer::NODE_ID,$request->getParameter('nid'));
  230.     $criteria->add(EtvaLogicalvolumePeer::WRITEABLE1);
  231.     $criteria->add(EtvaLogicalvolumePeer::IN_USE0);
  232.     
  233.  
  234.     $etva_lvs EtvaLogicalvolumePeer::doSelect($criteria);
  235.  
  236.     if(!$etva_lvs){
  237.         $info array('success'=>false,'errors'=>'No logical volumes available');
  238.         $error $this->setJsonError($info);
  239.         return $this->renderText($error);
  240.     }
  241.  
  242.    
  243.     // build result to feed to combo...
  244.     $elements array();
  245.     foreach ($etva_lvs as $lv){
  246.  
  247.             $size $lv->getSize();
  248.            // $size = Etva::byte_to_MBconvert($size);
  249.             $elements[array('id'=>$lv->getLvdevice(),'txt'=>$lv->getLv(),'size'=>$size);
  250.  
  251.     }
  252.  
  253.  
  254.     $result array('total' =>   count($elements),'data'  => $elements);
  255.  
  256.     $return json_encode($result);
  257.     $this->getResponse()->setHttpHeader("X-JSON"'()');
  258.     return $this->renderText($return);
  259.  
  260.   }
  261.  
  262.  
  263.   protected function setJsonError($info,$statusCode 400){
  264.  
  265.       $this->getContext()->getResponse()->setStatusCode($statusCode);
  266.       $error json_encode($info);
  267.       $this->getContext()->getResponse()->setHttpHeader("X-JSON"'()');
  268.       return $error;
  269.  
  270.   }
  271.  
  272.   /*
  273.    * Used to process soap requests => updateVirtAgentLvs
  274.    * Updates logical volume info
  275.    *
  276.    * Params: uid (virtAgent uid), lvs (object containing logical volumes info)
  277.    * Return: array success
  278.    */
  279.   public function executeSoapUpdate(sfWebRequest $request)
  280.   {
  281.  
  282.         /*
  283.         * Check if the request is made via soapapi.php interface
  284.         */
  285.         if(SF_ENVIRONMENT == 'soap'){
  286.  
  287.             $lvs $request->getParameter('lvs');
  288.  
  289.             // check node ID correspondig to the uid given
  290.             $c new Criteria();
  291.             $c->add(EtvaNodePeer::UID ,$request->getParameter('uid'));
  292.  
  293.             if(!$etva_node EtvaNodePeer::doSelectOne($c)){
  294.                 $error_msg sprintf('Object etva_node does not exist (%s).'$request->getParameter('uid'));
  295.                 $error array('success'=>false,'errors'=>$error_msg);
  296.                 return $error;
  297.             }
  298.  
  299.             $criteriaVG new Criteria();
  300.             $criteriaVG->add(EtvaVolumegroupPeer::NODE_ID,$etva_node->getId());
  301.  
  302.             $criteriaLV new Criteria();
  303.             $criteriaLV->add(EtvaLogicalvolumePeer::NODE_ID,$etva_node->getId());
  304.  
  305.             // for each lv....
  306.             foreach($lvs as $lv=>$lvInfo){
  307.  
  308.                 // check if exists in DB
  309.                 $etva_logicalvol EtvaLogicalvolumePeer::retrieveByLvDevice($lvInfo->lvdevice,$criteriaLV);
  310.  
  311.                 // if NOT exists create new....else update som info
  312.                 if(!$etva_logicalvol$etva_logicalvol new EtvaLogicalvolume();
  313.  
  314.  
  315.                 $etva_logicalvol->setNodeId($etva_node->getId());
  316.  
  317.  
  318.                 // get volume group information for the lv
  319.                 $etva_vg EtvaVolumegroupPeer::retrieveByVg($lvInfo->vg,$criteriaVG);
  320.  
  321.                 if($etva_vg){
  322.  
  323.                     $etva_logicalvol->setVolumegroupId($etva_vg->getId());
  324.  
  325.                     $etva_logicalvol->setLv($lv);
  326.                     $etva_logicalvol->setLvdevice($lvInfo->lvdevice);
  327.                     $etva_logicalvol->setSize($lvInfo->size);
  328.                     $etva_logicalvol->setFreesize($lvInfo->freesize);
  329.                     $etva_logicalvol->setStorageType($lvInfo->type);
  330.                     $etva_logicalvol->setWriteable($lvInfo->writeable);
  331.  
  332.                     $etva_logicalvol->save();
  333.                 }
  334.  
  335.             }// end foreach
  336.  
  337.             return array('success'=>true);
  338.  
  339.         }// end soap request
  340.  
  341.  
  342.   }
  343.  
  344. }

Documentation generated on Fri, 19 Jun 2009 10:45:47 +0100 by phpDocumentor 1.4.2