'ASC', ); protected $_has_many = array( 'MGMTCLASS'=>array('foreign_key'=>'DOMAIN_NAME','far_key'=>'DOMAIN_NAME'), 'NODE'=>array('foreign_key'=>'DOMAIN_NAME','far_key'=>'DOMAIN_NAME'), 'SCHEDULE_CLIENT'=>array('foreign_key'=>'DOMAIN_NAME','far_key'=>'DOMAIN_NAME') ); protected $_tsm = array( 'db2'=>array( '_has_many'=>array( 'MGMTCLASS'=>array('foreign_key'=>'DOMAIN_NAME','far_key'=>'DOMAIN_NAME'), 'NODE'=>array('foreign_key'=>'DOMAINNAME','far_key'=>'DOMAIN_NAME'), 'SCHEDULE_CLIENT'=>array('foreign_key'=>'DOMAIN_NAME','far_key'=>'DOMAIN_NAME') ), ), ); /** * Get all the NODES in this DOMAIN */ private function _nodes() { $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('NODE')->find_all() as $o) if ($o->DOMAIN_NAME == $this->DOMAIN_NAME) array_push($result,$o); return $result; } public function nodes() { return $this->_nodes(); } /** * Return the FILES that NODES in this DOMAIN has in a STORAGE POOL * @param $pool is STORAGE POOL NAME */ public function file_bypool($pool) { $k = sprintf('%s-%s-%s',__METHOD__,$this->DOMAIN_NAME,$pool); $c = Kohana::$config->load('config')->cache; if (is_null($result = Cache::instance($c)->get($k))) { $result = 0; foreach ($this->_nodes() as $no) $result += $no->file_bypool($pool); // @todo Cache time should be configurble Cache::instance($c)->set($k,$result,300); } return $result; } /** * Return the LOGICAL_MB that NODES in this DOMAIN has in a STORAGE POOL * @param $pool is STORAGE POOL NAME */ public function logmb_bypool($pool) { $k = sprintf('%s-%s-%s',__METHOD__,$this->DOMAIN_NAME,$pool); $c = Kohana::$config->load('config')->cache; if (is_null($result = Cache::instance($c)->get($k))) { $result = 0; foreach ($this->_nodes() as $no) $result += $no->logmb_bypool($pool); // @todo Cache time should be configurble Cache::instance($c)->set($k,$result,300); } return $result; } /** * Return the NODES in this DOMAIN that have data in this STORAGE POOL * @param $pool is STORAGE POOL NAME */ public function nodes_bypool(ORM $spo) { $result = array(); foreach ($spo->nodes() as $no) if (in_array($no,$this->_nodes())) array_push($result,$no); return $result; } /** * Return the STORAGE POOLS used by NODES in this DOMAIN */ public function stgpools() { $k = sprintf('%s-%s',__METHOD__,$this->DOMAIN_NAME); $c = Kohana::$config->load('config')->cache; if (is_null($result = Cache::instance($c)->get($k))) { $result = array(); foreach ($this->nodes() as $no) foreach ($no->stgpools() as $spo) if (! in_array($spo,$result)) array_push($result,$spo); // @todo Cache time should be configurble Cache::instance($c)->set($k,$result,300); } return $result; } /** * Return the STORAGE POOL TYPES used by NODES in this DOMAIN * ie: ACTIVE/PRIMARY/COPY * @todo This should be sorted by PRIMARY/ACTIVE/COPY */ public function stgpooltypes() { $k = sprintf('%s-%s',__METHOD__,$this->DOMAIN_NAME); $c = Kohana::$config->load('config')->cache; if (is_null($result = Cache::instance($c)->get($k))) { $result = array(); foreach ($this->stgpools() as $spo) if (! in_array($spo->POOLTYPE,$result)) array_push($result,$spo->POOLTYPE); // @todo Cache time should be configurble Cache::instance($c)->set($k,$result,300); } return $result; } /** * Return the STORAGE POOLS that NODES in this DOMAIN uses by BACKUP TYPE * @param $type is BACKUP/ARCHIVE/SPACE MANAGED */ public function stgpools_bybtype($type) { $k = sprintf('%s-%s-%s',__METHOD__,$this->DOMAIN_NAME,$type); $c = Kohana::$config->load('config')->cache; if (is_null($result = Cache::instance($c)->get($k))) { $x = $result = array(); foreach ($this->_nodes() as $no) foreach ($no->stgpools_bybtype($type) as $spo) if (! in_array($spo->STGPOOL_NAME,$result)) array_push($result,$spo); Sort::MASort($result,'STGPOOL_NAME'); // @todo Cache time should be configurble Cache::instance($c)->set($k,$result,300); } return $result; } /** * Return the STORAGE POOLS that NODES in this DOMAIN uses by BACKUP TYPE * @param $type is ACTIVEDATA/PRIMARY/COPY */ public function stgpools_byptype($type) { $k = sprintf('%s-%s-%s',__METHOD__,$this->DOMAIN_NAME,$type); $c = Kohana::$config->load('config')->cache; if (is_null($result = Cache::instance($c)->get($k))) { $result = array(); foreach ($this->stgpools() as $spo) if ($spo->POOLTYPE == $type) array_push($result,$spo); // @todo Cache time should be configurble Cache::instance($c)->set($k,$result,300); } return $result; } /** * Return the VOLUMES that NODES in this DOMAIN use * @param $pool is STORAGE POOL NAME */ public function vols_bypool($pool) { $k = sprintf('%s-%s-%s',__METHOD__,$this->DOMAIN_NAME,$pool); $c = Kohana::$config->load('config')->cache; if (is_null($result = Cache::instance($c)->get($k))) { $x = $result = array(); foreach ($this->_nodes() as $no) foreach ($no->vols_bypool($pool) as $vuo) if (! in_array($vuo->VOLUME_NAME,$x)) { array_push($result,$vuo); array_push($x,$vuo->VOLUME_NAME); } // @todo Cache time should be configurble Cache::instance($c)->set($k,$result,300); } return $result; } /** * Return the VOLUMES that NODES in this DOMAIN uses by BACKUP TYPE * @param $type is BACKUP/ARCHIVE/SPACE MANAGED */ public function vols_bybtype($type) { $k = sprintf('%s-%s-%s',__METHOD__,$this->DOMAIN_NAME,$type); $c = Kohana::$config->load('config')->cache; if (TRUE OR is_null($result = Cache::instance($c)->get($k))) { $x = $result = array(); foreach ($this->_nodes() as $no) foreach ($no->vols_bybtype($type) as $vuo) if (! in_array($vuo->VOLUME_NAME,$x)) { array_push($result,$vuo); array_push($x,$vuo->VOLUME_NAME); } // @todo Cache time should be configurble Cache::instance($c)->set($k,$result,300); } return $result; } /** * Return the VOLUMES that this NODE uses by pool and BACKUP TYPE * @param $pool is STORAGE POOL NAME * @param $type is BACKUP/ARCHIVE/SPACE MANAGED */ public function vols_bypoolbybtype($pool,$type) { $x = $result = array(); foreach ($this->vols_bypool($pool) as $vuo) if ($vuo->COPY_TYPE == $type AND ! in_array($vuo->VOLUME_NAME,$x)) { array_push($result,$vuo); array_push($x,$vuo->VOLUME_NAME); } return $result; } } ?>