File Coverage

blib/lib/Win32/Tracert/Statistics.pm
Criterion Covered Total %
statement 62 62 100.0
branch 5 6 83.3
condition n/a
subroutine 12 12 100.0
pod 3 4 75.0
total 82 84 97.6


line stmt bran cond sub pod time code
1             package Win32::Tracert::Statistics;
2             $Win32::Tracert::Statistics::VERSION = '0.012'; # TRIAL
3 2     2   39884 use strict;
  2         5  
  2         85  
4 2     2   9 use warnings;
  2         2  
  2         61  
5              
6 2     2   913 use Object::Tiny qw (input);
  2         488  
  2         9  
7              
8             # ABSTRACT: Permit access to some statistics from determined Win32::Tracert path
9              
10             #redefine constuctor
11             sub new {
12 3     3 0 244 my $class = shift;
13 3         16 my $self = $class->SUPER::new( @_ );
14             # Extra checking and such
15 3 100       74 die "You must define [input] attribute" if (! defined $self->input);
16 1 50       27 die "Attending HASH REF and got something else ! \n" unless ref($self->input) eq "HASH";
17            
18 1         6 return $self;
19             }
20              
21             sub average_responsetime_for{
22 9     9 1 813 my ($self,$packet_sample)=@_;
23 9         8 my $average_responsetime;
24             my $number_of_excluded_values;
25            
26 9         9 foreach my $ipaddress (keys %{$self->input}){
  9         180  
27 9         35 my %responsetime_sample=map {$_->{HOPID} => _rounding_value_to_1($_->{$packet_sample})} @{$self->input->{$ipaddress}{HOPS}};
  252         319  
  9         125  
28 9         37 my @initial_responsetime_values=_list_responsetime_values(\%responsetime_sample);
29 9         18 my @filtered_responsetime_values=_exclude_star_value(@initial_responsetime_values);
30 9         13 my $sum_responsetime=0;
31 9         6 map { $sum_responsetime+=$_ } @filtered_responsetime_values;
  243         195  
32 9         16 $average_responsetime=_average_responsetime($sum_responsetime,scalar @filtered_responsetime_values);
33 9         13 $number_of_excluded_values=_responsetime_values_excluded(scalar @initial_responsetime_values, scalar @filtered_responsetime_values);
34             }
35 9         19 return $average_responsetime, $number_of_excluded_values;
36             }
37              
38             sub average_responsetime_global{
39 1     1 1 219 my ($self)=@_;
40 1         2 my %result;
41 1         3 foreach my $packetsmp ($self->list_packet_samples){
42 3         7 my ($result,$number_of_excluded_values)=$self->average_responsetime_for("$packetsmp");
43 3         7 $result{$packetsmp}=[$result,$number_of_excluded_values];
44             }
45 1         4 my $total_sample=scalar $self->list_packet_samples;
46 1         1 my $sum_responsetime=0;
47 1         2 my $sum_of_excluded_values=0;
48 1         2 map { $sum_responsetime+=$_->[0] ; $sum_of_excluded_values+=$_->[1] } values %result;
  3         3  
  3         4  
49 1         2 my $average_responsetime=_average_responsetime($sum_responsetime,$total_sample);
50 1         2 my $average_number_of_excluded_values=$sum_of_excluded_values / $total_sample;
51            
52 1         4 return $average_responsetime, $average_number_of_excluded_values;
53             }
54              
55             sub list_packet_samples{
56 3     3 1 260 my ($self)=@_;
57 3         3 my ($ipaddress) = keys %{$self->input};
  3         69  
58 3         15 my @packetsmp_list=grep {$_ =~ /PACKET/} keys %{$self->input->{$ipaddress}{HOPS}[0]};
  18         36  
  3         45  
59 3         8 return @packetsmp_list;
60             }
61              
62             sub _list_responsetime_values{
63 9     9   13 my $responsetime_hashref=shift;
64 9         61 return values %$responsetime_hashref;
65             }
66              
67             sub _exclude_star_value{
68 9     9   36 my @values_to_check=@_;
69 9         10 return grep {$_ ne '*'} @values_to_check;
  252         272  
70             }
71              
72             sub _rounding_value_to_1{
73 252     252   163 my $value=shift;
74 252 100       247 my $rounded_value = $value eq '<1' ? 1 : $value;
75 252         395 return $rounded_value;
76             }
77              
78             sub _average_responsetime{
79 10     10   10 my ($sum_of_values,$number_of_values)=@_;
80 10         14 return $sum_of_values / $number_of_values;
81             }
82              
83             sub _responsetime_values_excluded{
84 9     9   8 my ($initial_values,$filtered_values)=@_;
85 9         64 return $initial_values - $filtered_values;
86             }
87              
88             1;
89              
90             __END__