diff --git a/application/classes/controller/node.php b/application/classes/controller/node.php index f428084..c688ef8 100644 --- a/application/classes/controller/node.php +++ b/application/classes/controller/node.php @@ -73,6 +73,22 @@ $(document).ready(function () {$("#node_name").change(function () { 'body'=>$output, )); + $output = View::factory('nodes/detail_volumes') + ->set('node',$no); + + Block::add(array( + 'title'=>_('Sequential Volume Usage Information'), + 'body'=>$output, + )); + + $output = View::factory('nodes/detail_schedule') + ->set('node',$no); + + Block::add(array( + 'title'=>_('Schedule Information'), + 'body'=>$output, + )); + $this->template->content = Block::factory(); } } diff --git a/application/classes/model/association.php b/application/classes/model/association.php new file mode 100644 index 0000000..5f3e688 --- /dev/null +++ b/application/classes/model/association.php @@ -0,0 +1,24 @@ +'ASC', + 'NODE_NAME'=>'ASC', + ); + + protected $_has_one = array( + 'SCHEDULE_CLIENT'=>array('foreign_key'=>'SCHEDULE_NAME','far_key'=>'SCHEDULE_NAME'), + ); +} +?> diff --git a/application/classes/model/auth/userdefault.php b/application/classes/model/auth/userdefault.php index 5759a92..e59b14c 100644 --- a/application/classes/model/auth/userdefault.php +++ b/application/classes/model/auth/userdefault.php @@ -13,82 +13,5 @@ class Model_Auth_UserDefault extends Model_Auth_User { protected $_disable_wild_select = TRUE; protected $_disable_join_table_name = TRUE; protected $_disable_limit = TRUE; - - // Validation rules - protected $_rules = array( - 'admin_name' => array( - 'not_empty' => NULL, - 'min_length' => array(4), - 'max_length' => array(8), - ), - 'password' => array( - 'not_empty' => NULL, - 'min_length' => array(5), - 'max_length' => array(16), - ), - 'password_confirm' => array( - 'matches_ifset' => array('password'), - ), - ); - - // Columns to ignore - protected $_ignored_columns = array('password_confirm'); - - // Field labels - protected $_labels = array( - 'admin_name' => 'username', - 'email' => 'email address', - 'password' => 'password', - 'password_confirm' => 'password confirmation', - ); - - /** - * Validates login information from an array, and optionally redirects - * after a successful login. - * - * @param array values to check - * @param string URI or URL to redirect to - * @return boolean - */ - public function login(array & $array, $redirect = FALSE) { - $fieldname = 'admin_name'; // @todo This should be defined in a config or database driver file - $array = Validate::factory($array) - ->label('username', $this->_labels[$fieldname]) - ->label('password', $this->_labels['password']) - ->filter(TRUE, 'trim') - ->filter('username','strtoupper') - ->rules('username', $this->_rules[$fieldname]) - ->rules('password', $this->_rules['password']); - - // Get the remember login option - $remember = isset($array['remember']); - - // Login starts out invalid - $status = FALSE; - - if ($array->check()) - { - // Attempt to load the user - $this->where($fieldname, '=', $array['username'])->find(); - - if ($this->loaded() AND Auth::instance()->login($this, $array['password'], $remember)) - { - if (is_string($redirect)) - { - // Redirect after a successful login - Request::instance()->redirect($redirect); - } - - // Login is successful - $status = TRUE; - } - else - { - $array->error('admin_name', 'invalid'); - } - } - - return $status; - } } ?> diff --git a/application/classes/model/clientopt.php b/application/classes/model/clientopt.php new file mode 100644 index 0000000..3d47c5b --- /dev/null +++ b/application/classes/model/clientopt.php @@ -0,0 +1,21 @@ +'ASC', + 'OPTION_NAME'=>'ASC', + 'SEQNUMBER'=>'ASC', + ); +} +?> diff --git a/application/classes/model/copygroup/ar.php b/application/classes/model/copygroup/ar.php new file mode 100644 index 0000000..bb0d987 --- /dev/null +++ b/application/classes/model/copygroup/ar.php @@ -0,0 +1,21 @@ +'ASC', + 'SET_NAME'=>'ASC', + 'CLASS_NAME'=>'ASC', + ); +} +?> diff --git a/application/classes/model/copygroup/bu.php b/application/classes/model/copygroup/bu.php new file mode 100644 index 0000000..8fb6177 --- /dev/null +++ b/application/classes/model/copygroup/bu.php @@ -0,0 +1,21 @@ +'ASC', + 'SET_NAME'=>'ASC', + 'CLASS_NAME'=>'ASC', + ); +} +?> diff --git a/application/classes/model/devclasses.php b/application/classes/model/devclasses.php new file mode 100644 index 0000000..3164c32 --- /dev/null +++ b/application/classes/model/devclasses.php @@ -0,0 +1,21 @@ +'ASC', + 'DEVCLASS_NAME'=>'ASC', + ); +} +?> diff --git a/application/classes/model/event.php b/application/classes/model/event.php new file mode 100644 index 0000000..3e8a9df --- /dev/null +++ b/application/classes/model/event.php @@ -0,0 +1,32 @@ +'ASC', + 'NODE_NAME'=>'ASC', + ); + + protected $_display_filters = array( + 'SCHEDULED_START'=>array( + array('ORMTSM::date',array(':value','d-M H:i')), + ), + 'ACTUAL_START'=>array( + array('ORMTSM::date',array(':value','d-M H:i')), + ), + 'COMPLETED'=>array( + array('ORMTSM::date',array(':value','d-M H:i')), + ), + ); +} +?> diff --git a/application/classes/model/filespace.php b/application/classes/model/filespace.php index 7ee2c5d..c2ba9dc 100644 --- a/application/classes/model/filespace.php +++ b/application/classes/model/filespace.php @@ -11,18 +11,21 @@ */ class Model_FILESPACE extends ORMTSM { protected $_table_name = 'FILESPACES'; - protected $_primary_key = 'FILESPACE_NAME'; + protected $_primary_key = 'FILESPACE_NAME'; // We need a primary key to detect that the object is loaded. + protected $_sorting = array( + 'NODE_NAME'=>'ASC', + 'FILESPACE_NAME'=>'ASC', + ); + protected $_has_many = array( 'VOLUMEUSAGE'=>array('foreign_key'=>array('NODE_NAME','FILESPACE_NAME'),'far_key'=>'FILESPACE_NAME'), 'OCCUPANCY'=>array('foreign_key'=>array('NODE_NAME','FILESPACE_NAME'),'far_key'=>'FILESPACE_NAME'), ); - protected $_formats = array( - 'BACKUP_END'=>array('ORMTSM::date'=>array('d-M-Y')), - ); - - protected $_sorting = array( - 'NODE_NAME'=>'ASC', + protected $_display_filters = array( + 'BACKUP_END'=>array( + array('ORMTSM::date',array(':value','d-M-Y')), + ), ); public function utilsation() { @@ -37,20 +40,20 @@ class Model_FILESPACE extends ORMTSM { ->where('TYPE','=',$dtype) ->group_by('STGPOOL_NAME') ->order_by('STGPOOL_NAME') - ->find_all() as $vo) { + ->find_all() as $oo) { - array_push($pool,$vo->STGPOOL_NAME); + array_push($pool,$oo->STGPOOL); } return $pool; } - public function pool_logical_util($pool) { - return $this->OCCUPANCY->where('STGPOOL_NAME','=',$pool)->find()->LOGICAL_MB; + public function pool_logical_util($pool,$btype) { + return $this->OCCUPANCY->where('STGPOOL_NAME','=',$pool)->where('TYPE','=',$btype)->find()->LOGICAL_MB; } - public function pool_numvols($pool) { - return $this->VOLUMEUSAGE->where('STGPOOL_NAME','=',$pool)->find_all()->count(); + public function pool_numvols($pool,$ctype) { + return $this->VOLUMEUSAGE->where('STGPOOL_NAME','=',$pool)->where('COPY_TYPE','=',$ctype)->find_all()->count(); } } ?> diff --git a/application/classes/model/mgmtclass.php b/application/classes/model/mgmtclass.php new file mode 100644 index 0000000..e9d917d --- /dev/null +++ b/application/classes/model/mgmtclass.php @@ -0,0 +1,26 @@ +'DESC', + 'DOMAIN_NAME'=>'ASC', + 'CLASS_NAME'=>'ASC', + ); + + protected $_has_one = array( + 'COPYGROUP_BU'=>array('foreign_key'=>array('DOMAIN_NAME','SET_NAME','CLASS_NAME')), + 'COPYGROUP_AR'=>array('foreign_key'=>array('DOMAIN_NAME','SET_NAME','CLASS_NAME')), + ); +} +?> diff --git a/application/classes/model/node.php b/application/classes/model/node.php index a968440..d7f3dfc 100644 --- a/application/classes/model/node.php +++ b/application/classes/model/node.php @@ -12,44 +12,50 @@ class Model_NODE extends ORMTSM { protected $_table_name = 'NODES'; protected $_primary_key = 'NODE_NAME'; - protected $_has_many = array( - 'FILESPACE'=>array('foreign_key'=>'NODE_NAME','far_key'=>'FILESPACE_NAME'), - ); - - protected $_display_filters = array( - 'REG_TIME'=>array( - array('ORMTSM::date',array(':value','d-M-Y')), - ), - 'PWSET_TIME'=>array( - array('ORMTSM::date',array(':value','d-M-Y')), - ), - 'LASTACC_TIME'=>array( - array('ORMTSM::date',array(':value','d-M-Y')), - ), - 'LASTSESS_SENT'=>array( - array('number_format',array(':value',0)), - ), - 'LASTSESS_RECVD'=>array( - array('number_format',array(':value',0)), - ), - 'LASTSESS_DURATION'=>array( - array('number_format',array(':value',2)), - ), - 'LASTSESS_IDLEWAIT'=>array( - array('number_format',array(':value',2)), - ), - 'LASTSESS_COMMWAIT'=>array( - array('number_format',array(':value',2)), - ), - 'LASTSESS_MEDIAWAIT'=>array( - array('number_format',array(':value',2)), - ), - ); - protected $_sorting = array( 'NODE_NAME'=>'ASC', ); + protected $_has_many = array( + 'FILESPACE'=>array('foreign_key'=>'NODE_NAME','far_key'=>'NODE_NAME'), + 'VOLUMEUSAGE'=>array('foreign_key'=>'NODE_NAME','far_key'=>'NODE_NAME'), + 'ASSOCIATION'=>array('foreign_key'=>'NODE_NAME','far_key'=>'NODE_NAME'), + 'MGMTCLASS'=>array('foreign_key'=>'DOMAIN_NAME','far_key'=>'DOMAIN_NAME'), + 'CLIENTOPT'=>array('foreign_key'=>'OPTIONSET_NAME','far_key'=>'OPTION_SET'), + 'SUMMARY'=>array('foreign_key'=>'ENTITY','far_key'=>'NODE_NAME'), + 'EVENT'=>array('foreign_key'=>'NODE_NAME','far_key'=>'NODE_NAME'), + ); + + protected $_display_filters = array( + 'REG_TIME'=>array( + array('ORMTSM::date',array(':value','d-M-Y')), + ), + 'PWSET_TIME'=>array( + array('ORMTSM::date',array(':value','d-M-Y')), + ), + 'LASTACC_TIME'=>array( + array('ORMTSM::date',array(':value','d-M-Y')), + ), + 'LASTSESS_SENT'=>array( + array('number_format',array(':value',0)), + ), + 'LASTSESS_RECVD'=>array( + array('number_format',array(':value',0)), + ), + 'LASTSESS_DURATION'=>array( + array('number_format',array(':value',2)), + ), + 'LASTSESS_IDLEWAIT'=>array( + array('number_format',array(':value',2)), + ), + 'LASTSESS_COMMWAIT'=>array( + array('number_format',array(':value',2)), + ), + 'LASTSESS_MEDIAWAIT'=>array( + array('number_format',array(':value',2)), + ), + ); + // Pools used by a node. private $pools = array(); @@ -106,39 +112,72 @@ class Model_NODE extends ORMTSM { // @todo This should return the system setting (cloptset), if the node setting is not configured. public function txngroupmax() { - return $this->display('TXNGROUPMAX'); + return $this->TXNGROUPMAX; } // Work out all the storage pools used by a node. // $dtype is BACKUP or ARCHIVE - public function storagepools($dtype) { + public function getStoragePools($dtype) { return isset($this->pools[$dtype]) ? $this->pools[$dtype] : $this->_getpools($dtype); } private function _getpools($dtype) { $this->pools[$dtype] = array(); - foreach ($this->FILESPACE->find_all() as $fso) { - foreach ($fso->storagepools($dtype) as $pool_name) { - $po = ORM::Factory('stgpool',$pool_name); - - if (! isset($this->pools[$dtype][$po->POOLTYPE]) OR ! in_array($pool_name,$this->pools[$dtype][$po->POOLTYPE])) - $this->pools[$dtype][$po->POOLTYPE][] = $pool_name; - } - } + foreach ($this->FILESPACE->find_all() as $fso) + foreach ($fso->storagepools($dtype) as $po) + if (! isset($this->pools[$dtype][$po->POOLTYPE]) OR ! in_array($po->STGPOOL_NAME,$this->pools[$dtype][$po->POOLTYPE])) + $this->pools[$dtype][$po->POOLTYPE][] = $po; return $this->pools[$dtype]; } // Return the storage pools used for a backup type // $dtype is BACKUP or ARCHIVE - public function getStoragePools($dtype,$ptype) { + // $ptype is pool type (PRIMARY,ACTIVE,COPY) + public function getStoragePoolsType($dtype,$ptype) { if (! isset($this->pools[$dtype])) $this->_getpools($dtype); return isset($this->pools[$dtype][$ptype]) ? $this->pools[$dtype][$ptype] : array(); } + // @todo This routine should be cached. + public function getStorageTypeFiles($type) { + $count = 0; + + foreach ($this->FILESPACE->find_all() as $fo) + foreach ($fo->OCCUPANCY->find_all() as $oa) + if ($oa->STGPOOL->POOLTYPE == $type) + $count += $oa->NUM_FILES; + + return $count; + } + + // @todo This routine should be cached. + public function getStorageTypeData($type) { + $count = 0; + + foreach ($this->FILESPACE->find_all() as $fo) + foreach ($fo->OCCUPANCY->find_all() as $oa) + if ($oa->STGPOOL->POOLTYPE == $type) + $count += $oa->LOGICAL_MB; + + return $count; + } + + // Return the volumes that this node uses + // $dtype is BACKUP or ARCHIVE + // @todo Cache this data + public function volumes($dtype) { + $volumes = array(); + + foreach ($this->VOLUMEUSAGE->where('COPY_TYPE','=',$dtype)->order_by('STGPOOL_NAME,FILESPACE_NAME')->find_all() as $vol) + $volumes[$vol->STGPOOL_NAME][] = $vol->VOLUME; + + return $volumes; + } + /** * Get all the nodes by OS */ diff --git a/application/classes/model/occupancy.php b/application/classes/model/occupancy.php index a86a3a3..a69b027 100644 --- a/application/classes/model/occupancy.php +++ b/application/classes/model/occupancy.php @@ -11,17 +11,15 @@ */ class Model_OCCUPANCY extends ORMTSM { protected $_table_name = 'OCCUPANCY'; - protected $_primary_key = 'FILESPACE_NAME'; - protected $_has_many = array( - ); - - protected $_formats = array( - ); - + protected $_primary_key = 'NODE_NAME'; // We need a primary key to detect that the object is loaded. protected $_sorting = array( 'NODE_NAME'=>'ASC', 'FILESPACE_NAME'=>'ASC', 'STGPOOL_NAME'=>'ASC', ); + + protected $_has_one = array( + 'STGPOOL'=>array('foreign_key'=>'STGPOOL_NAME','far_key'=>'STGPOOL_NAME'), + ); } ?> diff --git a/application/classes/model/schedule/client.php b/application/classes/model/schedule/client.php new file mode 100644 index 0000000..6d3067f --- /dev/null +++ b/application/classes/model/schedule/client.php @@ -0,0 +1,25 @@ +'ASC', + ); + + protected $_display_filters = array( + 'STARTTIME'=>array( + array('ORMTSM::date',array(':value','h:m')), + ), + ); +} +?> diff --git a/application/classes/model/stgpool.php b/application/classes/model/stgpool.php index 9707843..ff02beb 100644 --- a/application/classes/model/stgpool.php +++ b/application/classes/model/stgpool.php @@ -12,14 +12,12 @@ class Model_STGPOOL extends ORMTSM { protected $_table_name = 'STGPOOLS'; protected $_primary_key = 'STGPOOL_NAME'; - protected $_has_many = array( - ); - - protected $_formats = array( - ); - protected $_sorting = array( 'STGPOOL_NAME'=>'ASC', ); + + protected $_has_one = array( + 'DEVCLASSES'=>array('foreign_key'=>'DEVCLASS_NAME','far_key'=>'DEVCLASS'), + ); } ?> diff --git a/application/classes/model/summary.php b/application/classes/model/summary.php new file mode 100644 index 0000000..e6da01a --- /dev/null +++ b/application/classes/model/summary.php @@ -0,0 +1,30 @@ +'ASC', + 'ENTITY'=>'ASC', + 'ACTIVITY'=>'ASC', + ); + + protected $_display_filters = array( + 'START_TIME'=>array( + array('ORMTSM::date',array(':value','d-M H:i')), + ), + 'END_TIME'=>array( + array('ORMTSM::date',array(':value','d-M H:i')), + ), + ); +} +?> diff --git a/application/classes/model/volume.php b/application/classes/model/volume.php new file mode 100644 index 0000000..71a688b --- /dev/null +++ b/application/classes/model/volume.php @@ -0,0 +1,39 @@ +'ASC', + 'STGPOOL_NAME'=>'ASC', + ); + + protected $_has_many = array( + 'VOLUMEUSAGE'=>array('foreign_key'=>'VOLUME_NAME','far_key'=>'VOLUME_NAME'), + ); + + protected $_display_filters = array( + 'LAST_READ_DATE'=>array( + array('ORMTSM::date',array(':value','d-M-Y')), + ), + 'LAST_WRITE_DATE'=>array( + array('ORMTSM::date',array(':value','d-M-Y')), + ), + ); + + // Show the number of nodes on a volume + // $dtype is BACKUP or ARCHIVE + public function getNodesOnVol($dtype) { + return $this->VOLUMEUSAGE->where('COPY_TYPE','=',$dtype)->find_all()->count(); + } +} +?> diff --git a/application/classes/model/volumeusage.php b/application/classes/model/volumeusage.php index f2784e3..039e80e 100644 --- a/application/classes/model/volumeusage.php +++ b/application/classes/model/volumeusage.php @@ -11,17 +11,15 @@ */ class Model_VOLUMEUSAGE extends ORMTSM { protected $_table_name = 'VOLUMEUSAGE'; - protected $_primary_key = 'FILESPACE_NAME'; - protected $_has_many = array( - ); - - protected $_formats = array( - ); - + protected $_primary_key = 'NODE_NAME'; // We need a primary key to detect that the object is loaded. protected $_sorting = array( 'NODE_NAME'=>'ASC', - 'FILESPACE_NAME'=>'ASC', - 'VOLUME_NAME'=>'ASC', +# 'FILESPACE_NAME'=>'ASC', // @todo Disabled, as we were getting some SQL errors, when the query returned no records +# 'VOLUME_NAME'=>'ASC', + ); + + protected $_has_one = array( + 'VOLUME'=>array('foreign_key'=>'VOLUME_NAME','far_key'=>'VOLUME_NAME'), ); } ?> diff --git a/application/classes/orm.php b/application/classes/orm.php index e2f7005..0af7843 100644 --- a/application/classes/orm.php +++ b/application/classes/orm.php @@ -63,7 +63,7 @@ class ORM extends Kohana_ORM { if (isset($this->_object_formated[$column])) return $this->_object_formated[$column]; else - return $value; + return $value ? $value : ' '; } } ?> diff --git a/application/classes/ormtsm.php b/application/classes/ormtsm.php index d6b7c59..b54b513 100644 --- a/application/classes/ormtsm.php +++ b/application/classes/ormtsm.php @@ -29,7 +29,7 @@ class ORMTSM extends ORM { } public static function date($date,$format) { - return date($format,strtotime($date)); + return $date ? date($format,strtotime($date)) : ''; } } ?> diff --git a/application/media/css/default.css b/application/media/css/default.css index 1f76b7c..0da1520 100644 --- a/application/media/css/default.css +++ b/application/media/css/default.css @@ -4,6 +4,7 @@ table.box-left { border: 1px solid #AAAACC; margin-right: auto; } table.box-center { border: 1px solid #AAAACC; margin-left: auto; margin-right: auto; } table.box-full { border: 1px solid #AAAACC; margin-right: auto; width: 100%; } tr.head { font-weight: bold; } +tr.subhead { background-color: #BBBBDD; } td.head { font-weight: bold; } td.bold { font-weight: bold; } td.bold-right { font-weight: bold; text-align: right; } diff --git a/application/views/nodes/detail.php b/application/views/nodes/detail.php index d07f5ed..e7eba86 100644 --- a/application/views/nodes/detail.php +++ b/application/views/nodes/detail.php @@ -45,7 +45,7 @@ - +
@@ -135,7 +135,88 @@
Last Session Performance Information
- [PERFORMANCE PIE-GRAPH?] +   + + + + + + + + + + + + + + + + + + + + + + + MGMTCLASS->where('SET_NAME','=','ACTIVE')->find_all() as $mco) { ?> + + + + + + + + + + + + + + + + + + + + + MGMTCLASS->where('SET_NAME','=','ACTIVE')->find_all() as $mco) { ?> + + + + + + +
Policy Settings
 
Backup Settings
MGMT ClassHSM Pool1st Backup PoolVer ExistVer DelFrequency
display('CLASS_NAME'); ?>DEFAULTMC=='Yes' ? ' *' : ''; ?>display('MIGDESTINATION'); ?>COPYGROUP_BU->display('DESTINATION'); ?>COPYGROUP_BU->display('VEREXISTS'),$mco->COPYGROUP_BU->display('RETEXTRA')); ?>COPYGROUP_BU->display('VERDELETED'),$mco->COPYGROUP_BU->display('RETONLY')); ?>COPYGROUP_BU->display('FREQUENCY'); ?>
 
Archive Settings
MGMT ClassDestinationRetain
display('CLASS_NAME'); ?>DEFAULTMC=='Yes' ? ' *' : ''; ?>COPYGROUP_AR->display('DESTINATION'); ?>COPYGROUP_AR->display('RETVER'); ?>
+ + + + + + + + + + + + + + + + OPTION_SET) { ?> + CLIENTOPT->find_all() as $coo) { ?> + + + + + + + + + + + + +
Server Side Client Options
 
Client OptionSeq #SettingForced
display('OPTION_NAME'); ?>display('SEQNUMBER'); ?>display('OPTION_VALUE'); ?>display('FORCE'); ?>
This node is not configured for any server side Client Options
diff --git a/application/views/nodes/detail_filesystem.php b/application/views/nodes/detail_filesystem.php index b862e22..d3378ce 100644 --- a/application/views/nodes/detail_filesystem.php +++ b/application/views/nodes/detail_filesystem.php @@ -5,7 +5,7 @@ Backup Information - storagepools('Bkup')) { ?> + getStoragePools('Bkup')) { ?>   @@ -14,7 +14,7 @@ Last Date Utilisation getStoragePools('Bkup',$type))) + if (count($pools = $node->getStoragePoolsType('Bkup',$type))) foreach ($pools as $pool_name) { ?> @@ -25,9 +25,9 @@ display('BACKUP_END'); ?> utilsation(),2); ?> getStoragePools('Bkup',$type))) + if (count($pools = $node->getStoragePoolsType('Bkup',$type))) foreach ($pools as $pool_name) { ?> - pool_logical_util($pool_name),2); ?> (pool_numvols($pool_name); ?>) + pool_logical_util($pool_name,'Bkup'),2); ?> (pool_numvols($pool_name,'BACKUP'); ?>) @@ -36,8 +36,27 @@ - -   + + + + + + + + + + + + + + + + + + + + +
Storage Summary
 
Storage TypeFilesMB
getStorageTypeFiles($type); ?>getStorageTypeData($type); ?>
@@ -46,14 +65,14 @@ Archive Information - storagepools('Arch')) { ?> + getStoragePools('Arch')) { ?>   File Space getStoragePools('Arch',$type))) + if (count($pools = $node->getStoragePoolsType('Arch',$type))) foreach ($pools as $pool_name) { ?> @@ -62,9 +81,9 @@ display('FILESPACE_NAME'); ?> getStoragePools('Arch',$type))) + if (count($pools = $node->getStoragePoolsType('Arch',$type))) foreach ($pools as $pool_name) { ?> - pool_logical_util($pool_name),2); ?> (pool_numvols($pool_name); ?>) + pool_logical_util($pool_name,'Arch'),2); ?> (pool_numvols($pool_name,'ARCHIVE'); ?>) diff --git a/application/views/nodes/detail_schedule.php b/application/views/nodes/detail_schedule.php new file mode 100644 index 0000000..33bcb43 --- /dev/null +++ b/application/views/nodes/detail_schedule.php @@ -0,0 +1,92 @@ + + + + + + + + +
+ + + + + ASSOCIATION->find_all()) { ?> + + + + + + + + + + + + ASSOCIATION->find_all() as $ao) { ?> + + + + + + + + + + + + +
TSM Node Schedules
 
ScheduleStart TimeDurationRepeatValid DayPriority
display('SCHEDULE_NAME'); ?>SCHEDULE_CLIENT->display('STARTTIME'); ?>SCHEDULE_CLIENT->DURATION,$ao->SCHEDULE_CLIENT->DURUNITS); ?>SCHEDULE_CLIENT->PERIOD,$ao->SCHEDULE_CLIENT->PERUNITS); ?>SCHEDULE_CLIENT->display('DAYOFWEEK'); ?>SCHEDULE_CLIENT->display('PRIORITY'); ?>
There are no TSM schedules define for this Node.
+
+ + + + + + + + + + + + + + + SUMMARY->find_all() as $so) { ?> + + + + + + + + +
Summary Activity
 
StartEndActivityScheduleMB
display('START_TIME'); ?>display('END_TIME'); ?>display('ACTIVITY'); ?>display('SCHEDULE_NAME'); ?>display('BYTES')/1024/1024,2)); ?>
+
+ + + + + + + + + + + + + + + + EVENT->find_all() as $eo) { ?> + + + + + + + + + +
Schedule Activity
 
Sched StartAct StartSchedule NameStatusCompletedResult
display('SCHEDULED_START'); ?>ACTUAL_START ? $eo->display('ACTUAL_START') : ' '; ?>display('SCHEDULE_NAME'); ?>display('STATUS'); ?>COMPLETED ? $eo->display('COMPLETED') : ' '; ?>RESULT,$eo->display('REASON')); ?>
+
diff --git a/application/views/nodes/detail_volumes.php b/application/views/nodes/detail_volumes.php new file mode 100644 index 0000000..ddff308 --- /dev/null +++ b/application/views/nodes/detail_volumes.php @@ -0,0 +1,51 @@ + + + + + + + +
+ + + + + volumes($dtype)) { ?> + + + + + + + + + + + + + + + volumes($dtype) as $stgpool => $vols) { + $spo = ORM::factory('STGPOOL',$stgpool); ?> + + + + + + + + + + + + + + + + + + +
 
VolumeLast Read DateLast Write DateAccessStatusErrors R/WUtilisationReclaimNodes on Vol
STGPOOL_NAME,$spo->RECLAIM,$spo->NUMSCRATCHUSED,$spo->MAXSCRATCH,$spo->DEVCLASSES->DEVTYPE); ?>
VOLUME_NAME; ?>display('LAST_READ_DATE'); ?>display('LAST_WRITE_DATE'); ?>display('ACCESS'); ?>display('STATUS'); ?>READ_ERRORS,$vol->WRITE_ERRORS); ?>display('EST_CAPACITY_MB'); ?>display('PCT_RECLAIM'); ?>getNodesOnVol($dtype); ?>
+
+   +