Skip to content

Instantly share code, notes, and snippets.

@mmattozzi
Created February 18, 2011 15:41
Show Gist options
  • Save mmattozzi/833834 to your computer and use it in GitHub Desktop.
Save mmattozzi/833834 to your computer and use it in GitHub Desktop.
Calculate percentile latencies based on stdin containing (\d+)\s{0,1}ms somewhere in the line
#!/usr/bin/perl -w
my @lines = <STDIN>;
my $totalTime = 0;
my $count = 0;
my @responseTimes = [];
for my $line (@lines) {
chomp $line;
if ($line =~ /(\d+)\s{0,1}ms/) {
my $time = $1;
$totalTime += $time;
$count++;
push @responseTimes, $time;
}
}
print "Response count = $count\n";
print "Average time = " . sprintf("%.3f", $totalTime / $count) . "ms\n";
calcPercentile(50, @responseTimes);
calcPercentile(75, @responseTimes);
calcPercentile(95, @responseTimes);
calcPercentile(96, @responseTimes);
calcPercentile(97, @responseTimes);
calcPercentile(98, @responseTimes);
calcPercentile(99, @responseTimes);
sub calcPercentile {
my ($per, @times) = @_;
@sorted = sort { $a <=> $b } ( @times );
my $len = scalar @sorted;
my $idx = int($len * $per / 100);
print "$per percentile = " . $sorted[$idx] . "ms, " . ($len - $idx) . " responses \n";
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment