File Coverage

blib/lib/Win32/Tracert/Statistics.pm
Criterion Covered Total %
statement 12 60 20.0
branch 1 6 16.6
condition n/a
subroutine 4 12 33.3
pod 3 4 75.0
total 20 82 24.3


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