File Coverage

blib/lib/IBM/StorageSystem/StatisticsSet.pm
Criterion Covered Total %
statement 6 70 8.5
branch 0 16 0.0
condition n/a
subroutine 2 13 15.3
pod 8 9 88.8
total 16 108 14.8


line stmt bran cond sub pod time code
1             package IBM::StorageSystem::StatisticsSet;
2              
3 1     1   7 use strict;
  1         2  
  1         39  
4 1     1   8 use warnings;
  1         4  
  1         798  
5              
6             our $VERSION = '0.01';
7             our $ITERATOR= 0;
8              
9             sub new {
10 0     0 0   my $class = shift;
11 0           my $self = bless {}, $class;
12 0           return $self
13             }
14              
15             sub next {
16 0     0 1   my $self = shift;
17 0 0         defined @{ $self->{stats} }[$ITERATOR] or return undef;
  0            
18 0           $ITERATOR++;
19 0           return @{ $self->{stats} }[$ITERATOR - 1]
  0            
20             }
21              
22             sub __push {
23 0     0     my( $self, @vals ) = @_;
24 0           push @{ $self->{stats} }, @vals;
  0            
25             }
26              
27             sub count {
28 0     0 1   my $self = shift;
29 0           return scalar @{ $self->{stats} }
  0            
30             }
31              
32             sub first {
33 0     0 1   my $self = shift;
34 0           return @{ $self->{stats} }[0]
  0            
35             }
36              
37             sub last {
38 0     0 1   my $self = shift;
39 0           return @{ $self->{stats} }[-1]
  0            
40             }
41              
42             sub min {
43 0     0 1   my( $self, $value ) = @_;
44 0 0         grep { /$value/ } $self->first->_values or return undef;
  0            
45 0 0         defined $self->{_data}->{$value} or $self->_sort( $value );
46              
47 0           return wantarray ? @{ $self->{_data}->{$value} }
  0            
48 0 0         : @{ $self->{_data}->{$value} }[0]
49             }
50              
51             sub max {
52 0     0 1   my( $self, $value ) = @_;
53 0           $self->min( $value );
54 0           return wantarray ? reverse @{ $self->{_data}->{$value} }
  0            
55 0 0         : @{ $self->{_data}->{$value} }[-1]
56             }
57              
58             sub avg {
59 0     0 1   my $self = shift;
60 0           my $d = {};
61 0           my $c = 0;
62              
63 0           foreach my $s ( @{ $self->{stats} } ) {
  0            
64              
65 0           foreach my $v ( keys %{ $s } ) {
  0            
66 0 0         next if $s->{$v} =~ /[a-zA-Z]/;
67 0 0         $s->{$v} =~ /\d+(\.{1}\d+)?/ or next;
68 0           $d->{$v} += $s->{$v};
69             }
70              
71 0           $c++
72             }
73            
74 0           foreach my $v ( keys %{ $d } ) {
  0            
75 0 0         next unless $d->{$v};
76 0           $d->{$v} /= $c
77             }
78              
79 0           my $ref = ref( @{ $self->{stats} }[0]);
  0            
80 0           my $s = $ref->new;
81              
82 0           for ( keys %{ $d } ) {
  0            
83 0           $s->$_( $d->{$_} )
84             }
85              
86 0           return $s
87             }
88              
89             sub _sort {
90 0     0     my( $self, $value ) = @_;
91 0           @{ $self->{_data}->{$value} } = map { $_->[0] }
  0            
  0            
92 0           sort { $a->[1] <=> $b->[1] }
93 0           map { [ $_, $_->$value ] } @{ $self->{stats} };
  0            
94             }
95              
96             sub values {
97 0     0 1   my $self = shift;
98 0           return $self->first->_values;
99             }
100              
101             1;
102              
103             __END__