/** * Return pre-formatted data for tree-column extjs * * $request may contain the following keys: * - nid: nid (virtAgent node ID) * @return array json array */ public function executeJsonLvsTree(sfWebRequest $request) { $lvs = array(); $etva_node = EtvaNodePeer::retrieveByPK($request->getParameter('nid')); if (!$etva_node) { $msg_i18n = $this->getContext()->getI18N()->__('No data found'); $lvs[] = array('expanded' => true, 'text' => $msg_i18n, 'qtip' => $msg_i18n, 'leaf' => true); $return = json_encode($lvs); $this->getResponse()->setHttpHeader('Content-type', 'application/json'); return $this->renderText($return); } $criteria = new Criteria(); //$node_lvs = $etva_node->getEtvaLogicalvolumes($criteria); $criteria->add(EtvaNodeLogicalvolumePeer::NODE_ID, $request->getParameter('nid')); $criteria->addAnd(EtvaLogicalvolumePeer::LV, 'etva-isos', Criteria::NOT_EQUAL); $criteria->addAnd(EtvaLogicalvolumePeer::LV, 'etva_isos', Criteria::NOT_EQUAL); $criteria->addAnd(EtvaLogicalvolumePeer::LV, 'etvaisos', Criteria::NOT_EQUAL); //$criteria->addJoin(EtvaNodeLogicalvolumePeer::LOGICALVOLUME_ID, EtvaLogicalvolumePeer::ID); $criteria->addAscendingOrderByColumn(EtvaLogicalvolumePeer::LV); $node_data_lvs = EtvaNodeLogicalvolumePeer::doSelectJoinEtvaLogicalvolume($criteria); //$node_data_lvs = EtvaLogicalvolumePeer::doSelect($criteria); $snapshots = array(); foreach ($node_data_lvs as $data_lv) { $etva_lv = $data_lv->getEtvaLogicalvolume(); $vm_name = ''; $vm_state = ''; $etva_vg = $etva_lv->getEtvaVolumegroup(); $etva_server = $etva_lv->getEtvaServer(); if ($etva_server) { $vm_name = $etva_server->getName(); $vm_state = $etva_server->getVmState(); } //check data consistency....should be fine if ($etva_vg) { $id = $etva_lv->getId(); $text = $etva_lv->getLv(); $disabled = false; if ($etva_lv->getInUse()) { $qtip = $this->getContext()->getI18N()->__(EtvaLogicalvolumePeer::_ERR_INUSE_, array('%name%' => $text, '%server%' => $vm_name)); } else { if ($etva_lv->getMounted()) { $qtip = $this->getContext()->getI18N()->__(EtvaLogicalvolumePeer::_ERR_SYSTEM_LV_, array('%name%' => $text)); $disabled = true; } else { if ($etva_lv->getSnapshotNodeId() && $etva_lv->getSnapshotNodeId() != $etva_node->getId()) { $qtip = $this->getContext()->getI18N()->__(EtvaLogicalvolumePeer::_SNAPSHOT_INOTHERNODE_, array('%name%' => $text)); $disabled = true; } else { if ($etva_lv->getSnapshot()) { $qtip = $this->getContext()->getI18N()->__(EtvaLogicalvolumePeer::_SNAPSHOT_LV_, array('%name%' => $text)); #$disabled = true; } else { if ($etva_lv->getInconsistent() || $data_lv->getInconsistent()) { $qtip = $this->getContext()->getI18N()->__('Inconsistent'); $disabled = true; } else { $qtip = $this->getContext()->getI18N()->__(EtvaLogicalvolumePeer::_NOTINUSE_, array('%name%' => $text)); } } } } } $pretty_size = $etva_lv->getSize(); $size = $etva_lv->getSize(); $vg = $etva_vg->getVg(); $vg_size = $etva_vg->getSize(); $vg_freesize = $etva_vg->getFreesize(); $cls = 'lv'; if ($etva_lv->getSnapshot()) { $snapshots[] = array('id' => $id, 'cls' => $cls, 'iconCls' => 'task', 'text' => $text, 'size' => $size, 'prettysize' => $pretty_size, 'vgsize' => $vg_size, 'singleClickExpand' => true, 'type' => 'lv-snapshot', 'vg' => $vg, 'vgfreesize' => $vg_freesize, 'snapshot' => $etva_lv->getSnapshot(), 'vm_state' => $vm_state, 'disabled' => $disabled, 'origin' => $etva_lv->getOrigin(), 'format' => $etva_lv->getFormat(), 'storagetype' => $etva_vg->getStorageType(), 'snapshot_node_id' => $etva_lv->getSnapshotNodeId(), 'inconsistent' => $etva_lv->getInconsistent() || $data_lv->getInconsistent(), 'vm_name' => $vm_name, 'qtip' => $qtip, 'leaf' => true); } else { $per_usage = $etva_lv->getVirtualSize() / $etva_lv->getSize(); $lv_iconCls = 'devices-folder'; if ($etva_lv->getPerUsageSnapshots() >= EtvaLogicalvolume::PER_USAGESNAPSHOTS_CRITICAL) { $lv_iconCls = 'devices-folder-error'; } $lvs[] = array('id' => $id, 'cls' => $cls, 'iconCls' => $lv_iconCls, 'text' => $text, 'size' => $size, 'prettysize' => $pretty_size, 'vgsize' => $vg_size, 'singleClickExpand' => true, 'type' => 'lv', 'vg' => $vg, 'vgfreesize' => $vg_freesize, 'format' => $etva_lv->getFormat(), 'storagetype' => $etva_vg->getStorageType(), 'vm_state' => $vm_state, 'disabled' => $disabled, 'inconsistent' => $etva_lv->getInconsistent() || $data_lv->getInconsistent(), 'virtual_size' => $etva_lv->getVirtualSize(), 'size_snapshots' => $etva_lv->getSizeSnapshots(), 'per_usage' => $per_usage, 'per_usage_snapshots' => $etva_lv->getPerUsageSnapshots(), 'vm_name' => $vm_name, 'qtip' => $qtip, 'leaf' => true); } } } foreach ($snapshots as $sn) { for ($i = 0; $i < sizeof($lvs); $i++) { if ($sn['vg'] == $lvs[$i]['vg'] && $sn['origin'] == $lvs[$i]['text']) { $lvs[$i]['leaf'] = false; $lvs[$i]['expanded'] = true; $lvs[$i]['children'][] = $sn; $lvs[$i]['havesnapshots'] = true; if ($sn['vm_name']) { $lvs[$i]['havesnapshots_inuse'] = true; } if ($sn['vm_state'] == 'running') { $lvs[$i]['havesnapshots_inuse_inrunningvm'] = true; } if ($sn['snapshot_node_id']) { $lvs[$i]['snapshot_node_id']; } if ($sn['snapshot_node_id'] && $sn['snapshot_node_id'] != $etva_node->getId()) { $lvs[$i]['qtip'] = $this->getContext()->getI18N()->__(EtvaLogicalvolumePeer::_LV_HAVESNAPSHOTS_INOTHERNODE_, array('%name%' => $lvs[$i]['text'])); $lvs[$i]['disabled'] = true; } } } } //$return = json_encode(array(array('text'=>'Lvs','expanded'=>true,'children'=>$lvs))); if (empty($lvs)) { $msg_i18n = $this->getContext()->getI18N()->__('No data found'); $lvs[] = array('expanded' => true, 'text' => $msg_i18n, 'qtip' => $msg_i18n, 'leaf' => true); } $return = json_encode($lvs); $this->getResponse()->setHttpHeader('Content-type', 'application/json'); return $this->renderText($return); }
public function preDelete(PropelPDO $con = null) { /* * delete lvs that are not shared....numVgs=1 only * */ $criteria = new Criteria(); $criteria->add(EtvaLogicalvolumePeer::CLUSTER_ID, $this->getClusterId()); $criteria->addGroupByColumn(EtvaNodeLogicalvolumePeer::LOGICALVOLUME_ID); $criteria->addAsColumn('numLvs', 'COUNT(' . EtvaNodeLogicalvolumePeer::LOGICALVOLUME_ID . ')'); $criteria->addHaving($criteria->getNewCriterion(EtvaNodeLogicalvolumePeer::LOGICALVOLUME_ID, 'numLvs=1', Criteria::CUSTOM)); $records = EtvaNodeLogicalvolumePeer::doSelectJoinEtvaLogicalvolume($criteria); foreach ($records as $record) { $etva_lv = $record->getEtvaLogicalvolume(); if ($record->getNodeId() == $this->getId()) { $etva_lv->delete(); } } /* * delete vgs that are not shared....numVgs=1 only * */ $criteria = new Criteria(); $criteria->add(EtvaVolumegroupPeer::CLUSTER_ID, $this->getClusterId()); $criteria->addGroupByColumn(EtvaNodeVolumegroupPeer::VOLUMEGROUP_ID); $criteria->addAsColumn('numVgs', 'COUNT(' . EtvaNodeVolumegroupPeer::VOLUMEGROUP_ID . ')'); $criteria->addHaving($criteria->getNewCriterion(EtvaNodeVolumegroupPeer::VOLUMEGROUP_ID, 'numVgs=1', Criteria::CUSTOM)); $records = EtvaNodeVolumegroupPeer::doSelectJoinEtvaVolumegroup($criteria); foreach ($records as $record) { $etva_vg = $record->getEtvaVolumegroup(); if ($record->getNodeId() == $this->getId()) { $etva_vg->delete(); } } /* * delete pvs that are not shared....numVgs=1 only * */ $criteria = new Criteria(); $criteria->add(EtvaPhysicalvolumePeer::CLUSTER_ID, $this->getClusterId()); $criteria->addGroupByColumn(EtvaNodePhysicalvolumePeer::PHYSICALVOLUME_ID); $criteria->addAsColumn('numPvs', 'COUNT(' . EtvaNodePhysicalvolumePeer::PHYSICALVOLUME_ID . ')'); $criteria->addHaving($criteria->getNewCriterion(EtvaNodePhysicalvolumePeer::PHYSICALVOLUME_ID, 'numPvs=1', Criteria::CUSTOM)); $records = EtvaNodePhysicalvolumePeer::doSelectJoinEtvaPhysicalvolume($criteria); foreach ($records as $record) { $etva_pv = $record->getEtvaPhysicalvolume(); if ($record->getNodeId() == $this->getId()) { $etva_pv->delete(); } } // delete rra node dir and cpu load rrd $this->deleteRRAFiles(); return true; }
public function get_sync_logicalvolumes($force_sync = false, $sharedonly = false) { $elements = array(); $criteria = new Criteria(); $criteria->add(EtvaNodeLogicalvolumePeer::NODE_ID, $this->etva_node->getId()); $db_node_lvs = EtvaNodeLogicalvolumePeer::doSelectJoinEtvaLogicalvolume($criteria); $force_flag = $force_sync ? 1 : 0; $response_lvs = $this->etva_node->soapSend(EtvaLogicalvolume_VA::GET_SYNC_LOGICALVOLUMES, array('force' => $force_flag)); if ($response_lvs['success']) { $lvs = $response_lvs['response']; foreach ($lvs as $k => $e) { $lv_e = (array) $e; if (!$sharedonly || $lv_e[EtvaLogicalvolume::STORAGE_TYPE_MAP] != EtvaLogicalvolume::STORAGE_TYPE_LOCAL_MAP) { $found = false; foreach ($db_node_lvs as $data) { $lv = $data->getEtvaLogicalvolume(); if ($lv_e[EtvaLogicalvolume::STORAGE_TYPE_MAP] == $lv->getStorageType()) { if ($lv->getUuid() && $lv_e[EtvaLogicalvolume::UUID_MAP]) { if ($lv->getUuid() == $lv_e[EtvaLogicalvolume::UUID_MAP]) { $found = true; } } else { if ($lv->getLvdevice() == $lv_e[EtvaLogicalvolume::LVDEVICE_MAP]) { $found = true; } } } } $etva_lv = new EtvaLogicalvolume(); $etva_volgroup = new EtvaVolumegroup(); $etva_volgroup->initData((array) $lv_e[EtvaLogicalvolume::VOLUMEGROUP_MAP]); /*$vg_ar = $lv_e[EtvaLogicalvolume::VOLUMEGROUP_MAP]; $vg_type = $vg_ar[EtvaVolumegroup::STORAGE_TYPE_MAP]; $vg_uuid = $vg_ar[EtvaVolumegroup::UUID_MAP]; $vg_name = $vg_ar[EtvaVolumegroup::VG_MAP]; $etva_volgroup = EtvaVolumegroupPeer::retrieveByNodeTypeUUIDVg($this->etva_node->getId(), $vg_type, $vg_uuid, $vg_name);*/ $etva_lv->initData($lv_e); $etva_lv->setEtvaVolumegroup($etva_volgroup); $arr_e = $etva_lv->_VA(); $arr_e['registered'] = $found; $elements[] = $arr_e; } } } foreach ($db_node_lvs as $data) { $lv = $data->getEtvaLogicalvolume(); if (!$sharedonly || $lv->getStorageType() != EtvaLogicalvolume::STORAGE_TYPE_LOCAL_MAP) { $found = false; foreach ($lvs as $k => $e) { $lv_e = (array) $e; if ($lv_e[EtvaLogicalvolume::STORAGE_TYPE_MAP] == $lv->getStorageType()) { if ($lv->getUuid() && $lv_e[EtvaLogicalvolume::UUID_MAP]) { if ($lv->getUuid() == $lv_e[EtvaLogicalvolume::UUID_MAP]) { $found = true; } } else { if ($lv->getLvdevice() == $lv_e[EtvaLogicalvolume::LVDEVICE_MAP]) { $found = true; } } } } if (!$found) { $arr_e = $lv->_VA(); $arr_e['inconsistent'] = true; $arr_e['registered'] = true; $elements[] = $arr_e; } } } return $elements; }