# Calculations to be run on the array values 181 sub average { 182 @_ == 1 or die ('Sub usage: $average = average(\@array);'); 183 my ($array_ref) = @_; 184 my $sum; 185 my $count = scalar @$array_ref; 186 foreach (@$array_ref) { $sum += $_; } 187 return $sum / $count; 188 } 189 190 sub median { 191 @_ == 1 or die ('Sub usage: $median = median(\@array);'); 192 my ($array_ref) = @_; 193 my $count = scalar @$array_ref; 194 my @array = sort { $a <=> $b } @$array_ref; 195 if ($count % 2) { 196 return $array[int($count/2)]; 197 } else { 198 return ($array[$count/2] + $array[$count/2 - 1]) / 2; 199 } 200 } 201 202 sub min { 203 @_ == 1 or die ('Sub usage: $min = min(\@array);'); 204 my ($array_ref) = @_; 205 my @array = sort { $a <=> $b } @$array_ref; 206 return $array[0]; 207 } 208 209 sub max { 210 @_ == 1 or die ('Sub usage: $max = max(\@array);'); 211 my ($array_ref) = @_; 212 my @array = sort { $a <=> $b } @$array_ref; 213 return $array[-1]; 214 } 215 216 sub samplecount { 217 @_ == 1 or die ('Sub usage: $sample_count = samplecount(\@array);'); 218 my ($array_ref) = @_; 219 my $count = scalar @$array_ref; 220 return $count; 221 } 222 223 224 #Modification for Jenkins syncronized metrics 225 226 my %seen = (); 227 228 open (FH, "< $resultsFile"); 229 my @lines = ; 230 foreach my $line (@lines) { 231 my @values = split ',', $line; 232 233 my $col1_val = $values[1]; 234 my $key = $values[2]; 235 my $errors = $values[7]; 236 237 $key =~ s/LOGGED IN //; 238 $key =~ s/ GET //; 239 $key =~ s/ POST //; 240 241 $seen{$key}->{error_count}++ if $errors eq 'false'; 242 push @{$seen{$key}->{col1_vals}}, $col1_val; 243 244 } 245 246 foreach my $key (keys %seen) { 247 my $sample_count = samplecount($seen{$key}->{col1_vals}); 248 my $error_count = ((($seen{$key}->{error_count})/($sample_count))*100); 249 my $median = median($seen{$key}->{col1_vals}); 250 my $average = average($seen{$key}->{col1_vals}); 251 my $minimum = min($seen{$key}->{col1_vals}); 252 my $maximum = max($seen{$key}->{col1_vals}); 253 print <