File Coverage

blib/lib/IBM/StorageSystem/VDisk.pm
Criterion Covered Total %
statement 21 43 48.8
branch 0 10 0.0
condition n/a
subroutine 7 12 58.3
pod 0 1 0.0
total 28 66 42.4


line stmt bran cond sub pod time code
1             package IBM::StorageSystem::VDisk;
2              
3 1     1   5 use strict;
  1         2  
  1         30  
4 1     1   5 use warnings;
  1         3  
  1         24  
5              
6 1     1   5 use Carp qw(croak);
  1         2  
  1         50  
7 1     1   6 use Scalar::Util qw(weaken);
  1         2  
  1         40  
8 1     1   599 use IBM::StorageSystem::VDisk::Copy;
  1         2  
  1         114  
9              
10             our $VERSION = '0.01';
11             our @ATTR = qw(FC_id FC_name IO_group_id IO_group_name RC_change RC_id RC_name cache
12             capacity copy_count fast_write_state fc_map_count filesystem formatted id mdisk_grp_id
13             mdisk_grp_name mdisk_id mdisk_name mirror_write_priority name preferred_node_id
14             se_copy_count status sync_rate throttling type udid vdisk_UID);
15              
16             our $OBJ = {
17             copy => {
18             bcmd => 'lsvdiskcopy -nohdr -delim :',
19             cmd => 'lsvdiskcopy -bytes -copy',
20             id => 'copy_id',
21             class => 'IBM::StorageSystem::VDisk::Copy',
22             type => 'copy'
23             }
24             };
25              
26             foreach my $attr ( @ATTR ) {
27             {
28 1     1   7 no strict 'refs';
  1         2  
  1         246  
29             *{ __PACKAGE__ .'::'. $attr } = sub {
30 0     0     my( $self, $val ) = @_;
31 0 0         $self->{$attr} = $val if $val;
32 0           return $self->{$attr}
33             }
34             }
35             }
36              
37             sub new {
38 0     0 0   my( $class, $ibm, %args ) = @_;
39 0           my $self = bless {}, $class;
40 0 0         defined $args{id} or croak 'Constructor failed: mandatory id argument not supplied';
41 0           weaken( $self->{__ibm } = $ibm );
42              
43 0           foreach my $attr ( @ATTR ) { $self->{$attr} = $args{$attr} }
  0            
44              
45 0           return $self
46             }
47              
48             foreach my $obj ( keys %{ $OBJ } ) {
49             {
50 1     1   7 no strict 'refs';
  1         2  
  1         467  
51             my $m = 'get_'.$obj.'s';
52              
53             *{ __PACKAGE__ ."::$obj" } = sub {
54 0     0     my( $self, $id ) = @_;
55 0 0         defined $id or return;
56 0 0         return ( $self->{$obj}->{$id} ? $self->{$obj}->{$id} : $self->$m( $id ) )
57             };
58            
59 0     0     *{ __PACKAGE__ .'::get_'. $obj } = sub { return $_[0]->$m( $_[1] ) };
60              
61             *{ __PACKAGE__ ."::$m" } = sub {
62 0     0     my( $self, $id ) = @_;
63              
64 0           my @objects = map { ( split /:/, $_ )[2] . " $self->{id}" }
  0            
65             split /\n/, $self->{__ibm}->__cmd( "$OBJ->{ $obj }->{ bcmd } $self->{ id }");
66              
67             my %a = (objects=> [ @objects ],
68             cmd => $OBJ->{ $obj }->{ cmd },
69             class => $OBJ->{ $obj }->{ class },
70 0           nocache=> 1 );
71 0           @objects = $self->{__ibm}->__get_ml_objects( %a );
72              
73 0           foreach my $object ( @objects ) {
74 0           $self->{ $OBJ->{ $obj }->{ type } }->{ $object->{ $OBJ->{ $obj }->{ id } } } = $object
75             }
76              
77 0 0         return ( defined $id ? $self->{ $OBJ->{ $obj }->{ type } }->{ $id } : @objects )
78             }
79             }
80             }
81              
82             1;
83              
84             __END__