'ASC', 'STGPOOL_NAME'=>'ASC', ); protected $_has_one = array( 'MEDIA'=>array('foreign_key'=>'VOLUME_NAME','far_key'=>'VOLUME_NAME'), 'STGPOOL'=>array('foreign_key'=>'STGPOOL_NAME','far_key'=>'STGPOOL_NAME'), ); protected $_has_many = array( 'VOLUMEUSAGE'=>array('foreign_key'=>'VOLUME_NAME','far_key'=>'VOLUME_NAME'), ); protected $_display_filters = array( 'LAST_READ_DATE'=>array( array('ORM_TSM::date',array(':value','d-M-Y')), ), 'LAST_WRITE_DATE'=>array( array('ORM_TSM::date',array(':value','d-M-Y')), ), ); /** * Get all the VOLUMEUSAGE for this VOLUME */ private function _volumeusage() { $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('VOLUMEUSAGE')->find_all() as $o) if ($o->VOLUME_NAME == $this->VOLUME_NAME) array_push($result,$o); return $result; } /** * Get FILESYSTEMS on a VOLUME * @param $type is BACKUP/ARCHIVE/SPACE MANAGED */ public function fs_bybtype($type) { $k = sprintf('%s-%s-%s',__METHOD__,$this->VOLUME_NAME,$type); $c = Kohana::$config->load('config')->cache; if (is_null($result = Cache::instance($c)->get($k))) { $result = array(); foreach ($this->_volumeusage() as $vuo) if ($vuo->COPY_TYPE == $type) array_push($result,$vuo); Sort::MASort($result,'VOLUME_NAME'); // @todo Cache time should be configurble Cache::instance($c)->set($k,$result,300); } return $result; } /** * Get NODES on a VOLUME * @param $type is BACKUP/ARCHIVE/SPACE MANAGED */ public function nodes_bybtype($type) { $k = sprintf('%s-%s-%s',__METHOD__,$this->VOLUME_NAME,$type); $c = Kohana::$config->load('config')->cache; if (TRUE OR is_null($result = Cache::instance($c)->get($k))) { $x = $result = array(); foreach ($this->_volumeusage() as $vuo) if ($vuo->COPY_TYPE == $type AND ! in_array($vuo->NODE_NAME,$x)) { array_push($result,$vuo); array_push($x,$vuo->NODE_NAME); } // @todo Cache time should be configurble Cache::instance($c)->set($k,$result,300); } return $result; } public function isScratch() { return $this->SCRATCH === 'YES' ? TRUE : FALSE; } // Age of a volume, based on last read/write access. public function age() { if ((! $this->LAST_READ_DATE AND ! $this->LAST_WRITE_DATE) OR $this->STATUS == 'EMPTY') return 0; else return (int)((time()-(strtotime(strtotime($this->LAST_READ_DATE) > strtotime($this->LAST_WRITE_DATE) ? $this->LAST_WRITE_DATE : $this->LAST_READ_DATE)))/86400); } public function recycle() { return Kohana::$config->load('config')->tsmtapeage < $this->age() ? TRUE : FALSE; } } ?>