#!/usr/bin/env perl use Time::Local ('timegm'); my $in = STDIN; use strict; my $intest=0; my $name; my $start=0; my $end=0; my %hash; my $fh; my $max=0; if ($#ARGV >= 0) { open($fh, "<", $ARGV[0]) || die "can't open ".$ARGV[0]; } else { $fh = $in; } if ($#ARGV >= 1) { $max = $ARGV[1]; if ($max =~ /\D/) { die "not a decimal number: '$max'"; } } print "TOP $max slowest tests\n"; while(<$fh>) { if (m/^testsuite: (.*)/) { $intest = 1; $name = $1; } if (m/testsuite-\w+:/) { $hash{"$name -> ".($end - $start)} = $end - $start; $intest = 0; $start = 0; } if (m/^time: (\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)/ && $intest) { my $ts=timegm($6,$5,$4,$3,$2 - 1,$1 - 1900); if ($start == 0) { $start = $ts; } else { $end = $ts; } } } my @sorted = sort { $hash{$b}<=>$hash{$a} } keys(%hash); $max = @sorted if (($max <= 0) or ($max > @sorted)); for my $l (@sorted[0..($max - 1)]) { print $l."\n"; }