blob: b0f8b3ea8ec8eae95ef9f1b13253d959ca3fa2ce [file] [log] [blame]
# Usage: perl filter.pl input output exceptionString layout
# where exceptionString is the string to filter in stack traces
# layout is one of NONE|LINE_NUMBER|RELATIVE|DATE|ABSOLUTE|ISO8601|HTML
#
$INPUT=$ARGV[0];
$OUTPUT=$ARGV[1];
$EXSTR=$ARGV[2];
$LAYOUT=$ARGV[3]; # filtering type
open(IN, $INPUT) || die "Could not open $INPUT";
open(OUT, ">$OUTPUT") || die "Could not open $OUTPUT";
local($oldfh) = select(); select(OUT); $|=1; select($oldfh);
if ($LAYOUT =~ "NONE") {
doNoneFilter();
} elsif($LAYOUT =~ "LINE_NUMBER") {
doLineNumberFilter();
} elsif($LAYOUT =~ "HTML") {
doHTMLFilter();
} else {
doFilter($LAYOUT);
}
close(OUT);
sub wrongFormat {
my $line = $_;
print "Wrong format. Offending line: \"$_\"\n";
exit 1;
}
sub doNoneFilter {
while(<IN>) {
print OUT;
}
}
sub doHTMLFilter {
while(<IN>) {
if(/\($EXSTR\.java:\d*\)/) {
s/\($EXSTR\.java:\d+\)/\($EXSTR\.java:XXX\)/g;
}
elsif(/\(Compiled Code\)/) {
s/\(Compiled Code\)$/\($EXSTR\.java:XXX\)/g;
}
elsif(/\(Unknown Source\)/) {
s/\(Unknown Source\)$/\($EXSTR\.java:XXX\)/g;
}
elsif(/<tr><td>\d+<\/td>/) {
s/<tr><td>\d+<\/td>/<tr><td>XXX<\/td>/;
}
print OUT ;
}
}
sub doLineNumberFilter {
while(<IN>) {
if(/\($EXSTR\.java:\d*\)/) {
s/\($EXSTR\.java:\d+\)$/\($EXSTR\.java:XXX\)/;
print OUT;
} elsif(/\(Compiled Code\)/) {
s/\(Compiled Code\)$/\($EXSTR\.java:XXX\)/;
print OUT;
} elsif(/\(Unknown Source\)/) {
s/\(Unknown Source\)$/\($EXSTR\.java:XXX\)/;
print OUT;
} else {
print OUT;
}
}
}
sub doFilter() {
my $layout = $_[0];
$basicPat = "\\[main\\] (FATAL|ERROR|WARN|INFO|DEBUG)";
#$basicPat = 'main';
$timePat = "\\d\\d:\\d\\d:\\d\\d,\\d{3}"; # "17:49:20.733"
#$datePat = "\\d\\d [A-Z][a-z]{2} \\d{4}"; # 20 Dec 1999
# The month is locale dependent
$datePat = "\\d\\d .{3,6} \\d{4}"; # 20 Dec 1999
if($layout =~ "NULL") {
$pattern = $basicPat;
}
# 98 [main] ERROR DEB - Message 15
elsif($layout =~ "RELATIVE") {
$pattern = "^\\d+ $basicPat";
}
# 17:49:20.733 [main] ERROR DEB - Message 15
elsif($layout =~ "ABSOLUTE") {
$pattern = "^$timePat $basicPat";
}
elsif ($layout =~ "DATE") {
$pattern = "^$datePat $timePat $basicPat";
}
elsif ($layout =~ "ISO8601") {
$pattern = "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2},\\d{3} $basicPat";
}
else {
die "Unknown layout [$layout]";
}
#print "PATTERN \"$pattern\"\n";
while(<IN>) {
if (/$pattern/o) {
$i = index($_,"[main]");
print OUT substr($_, $i);
} elsif(/\($EXSTR\.java:\d*\)/) {
s/\($EXSTR\.java:\d+\)$/\($EXSTR\.java:XXX\)/;
print OUT;
} elsif(/\(Compiled Code\)/) {
s/\(Compiled Code\)$/\($EXSTR\.java:XXX\)/;
print OUT;
} elsif(/\(Unknown Source\)/) {
s/\(Unknown Source\)$/\($EXSTR\.java:XXX\)/;
print OUT;
} elsif (/^java\.lang\.Exception: Just testing$/) {
print OUT;
}
else {
wrongFormat($_);
}
}
}