86 lines
2.4 KiB
PHP
86 lines
2.4 KiB
PHP
<?php defined('SYSPATH') or die('No direct access allowed.');
|
|
|
|
/**
|
|
*
|
|
* @package PTA
|
|
* @subpackage Storage Pools
|
|
* @category Models
|
|
* @author Deon George
|
|
* @copyright (c) 2010 phpTSMadmin Development Team
|
|
* @license http://phptsmadmin.sf.net/license.html
|
|
*/
|
|
class Model_STGPOOL extends TSM_ORM {
|
|
protected $_table_name = 'STGPOOLS';
|
|
protected $_primary_key = 'STGPOOL_NAME';
|
|
protected $_sorting = array(
|
|
'STGPOOL_NAME'=>'ASC',
|
|
);
|
|
|
|
protected $_has_one = array(
|
|
'DEVCLASSES'=>array('foreign_key'=>'DEVCLASS_NAME','far_key'=>'DEVCLASS'),
|
|
);
|
|
protected $_has_many = array(
|
|
'COPYGROUP_AR'=>array('foreign_key'=>'DESTINATION','far_key'=>'STGPOOL_NAME'),
|
|
'COPYGROUP_BU'=>array('foreign_key'=>'DESTINATION','far_key'=>'STGPOOL_NAME'),
|
|
'MGMTCLASS'=>array('foreign_key'=>'MIGDESTINATION','far_key'=>'STGPOOL_NAME'),
|
|
'VOLUME'=>array('foreign_key'=>'STGPOOL_NAME','far_key'=>'STGPOOL_NAME'),
|
|
'OCC'=>array('foreign_key'=>'STGPOOL_NAME','far_key'=>'STGPOOL_NAME'),
|
|
);
|
|
|
|
/**
|
|
* Get all the OCCUPANCY for this STORAGE POOL
|
|
*/
|
|
private function _occupancy() {
|
|
$result = array();
|
|
|
|
// In the interest of performance, we load all the records and get PHP to process it.
|
|
// Our ORM caching we reduce the hit on TSM.
|
|
foreach (ORM::factory('OCC')->find_all() as $o)
|
|
if ($o->STGPOOL_NAME == $this->STGPOOL_NAME)
|
|
array_push($result,$o);
|
|
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* Get all the NODES for this STORAGE POOL
|
|
*/
|
|
public function nodes() {
|
|
$k = sprintf('%s-%s',__METHOD__,$this->STGPOOL_NAME);
|
|
$c = Kohana::$config->load('config')->cache;
|
|
|
|
if (is_null($result = Cache::instance($c)->get($k))) {
|
|
$result = array();
|
|
|
|
// @todo This might want to return the NODE object.
|
|
foreach ($this->_occupancy() as $oo)
|
|
if (! in_array($oo->NODE_NAME,$result))
|
|
array_push($result,$oo->NODE_NAME);
|
|
|
|
// @todo Cache time should be configurble
|
|
Cache::instance($c)->set($k,$result,300);
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
// Return a list of volumes
|
|
// @param $inout IN|OUT of the library
|
|
// @param $status volume status FULL|FILLING|PENDING|EMPTY
|
|
public function libvolstype($inout,$status) {
|
|
$inout = strtolower($inout);
|
|
$status = strtoupper($status);
|
|
$result = array();
|
|
|
|
if (! isset($result[$inout]))
|
|
foreach ($this->VOLUME->find_all() as $vo) {
|
|
$state = $vo->MEDIA->inlib() ? 'in' : 'out';
|
|
|
|
$result[$state][$vo->STATUS][] = $vo;
|
|
}
|
|
|
|
return isset($result[$inout][$status]) ? $result[$inout][$status] : array();
|
|
}
|
|
}
|
|
?>
|