This helps figure out why the test was rerun: was it because it timed out the first time around? Because there was a network glitch? Or because the TestBot script got stuck or died unexpectedly? The error message in the old logs will make it clear.
Signed-off-by: Francois Gouget fgouget@codeweavers.com --- testbot/lib/WineTestBot/Tasks.pm | 27 +++++++++++- testbot/web/JobDetails.pl | 75 ++++++++++++++++++++------------ 2 files changed, 73 insertions(+), 29 deletions(-)
diff --git a/testbot/lib/WineTestBot/Tasks.pm b/testbot/lib/WineTestBot/Tasks.pm index 36cbfadbe..69d551b84 100644 --- a/testbot/lib/WineTestBot/Tasks.pm +++ b/testbot/lib/WineTestBot/Tasks.pm @@ -83,7 +83,32 @@ sub _SetupTask($$) my ($VM, $self) = @_;
# Remove the previous run's files if any - $self->RmTree(); + my $Dir = $self->GetDir(); + if (-d $Dir) + { + mkpath("$Dir.new", 0, 0775); + rename "$Dir/log.old", "$Dir.new/log.old" if (-f "$Dir/log.old"); + rename "$Dir/err.old", "$Dir.new/err.old" if (-f "$Dir/err.old"); + foreach my $Filename ("log", "err") + { + if (open(my $Src, "<", "$Dir/$Filename")) + { + if (open(my $Dst, ">>", "$Dir.new/$Filename.old")) + { + print $Dst "----- Run ", ($self->TestFailures || 0), " $Filename\n"; + while (my $Line = <$Src>) + { + print $Dst $Line; + } + close($Dst); + } + close($Src); + } + } + + $self->RmTree(); + rename("$Dir.new", $Dir); + }
# Capture Perl errors in the task's generic error log my $TaskDir = $self->CreateDir(); diff --git a/testbot/web/JobDetails.pl b/testbot/web/JobDetails.pl index 0213eb5e2..4d9a77a57 100644 --- a/testbot/web/JobDetails.pl +++ b/testbot/web/JobDetails.pl @@ -249,16 +249,21 @@ sub GenerateBody($) $self->CGI->escapeHTML($VM->Details || "No details!"), "</details>\n";
- my $ScreenshotParamName = "scrshot_$Key"; my $FullLogParamName = "log_$Key"; - my $LogName = "$TaskDir/log"; - my $ErrName = "$TaskDir/err"; + my $FullLog = $self->GetParam($FullLogParamName); + $FullLog = "" if ($FullLog !~ /^[12]$/); + + my $ScreenshotParamName = "scrshot_$Key"; + my $Screenshot = $self->GetParam($ScreenshotParamName); + $Screenshot = "" if ($Screenshot ne "1"); + + print "<div class='TaskMoreInfoLinks'>\n"; # FIXME: Disable live screenshots for now if (0 && $StepTask->Status eq "running" && ($StepTask->Type eq "single" || $StepTask->Type eq "suite")) { - if (defined($self->GetParam($ScreenshotParamName))) + if ($Screenshot) { my $URI = "/Screenshot.pl?VMName=" . uri_escape($VM->Name); print "<div class='Screenshot'><img src='" . @@ -277,7 +282,7 @@ sub GenerateBody($) } elsif (-r "$TaskDir/screenshot.png") { - if (defined($self->GetParam($ScreenshotParamName))) + if ($Screenshot) { my $URI = "/Screenshot.pl?JobKey=" . uri_escape($self->{JobId}) . "&StepKey=" . uri_escape($StepTask->StepNo) . @@ -289,10 +294,7 @@ sub GenerateBody($) { my $URI = $ENV{"SCRIPT_NAME"} . "?Key=" . uri_escape($self->{JobId}) . "&$ScreenshotParamName=1"; - if (defined($self->GetParam($FullLogParamName))) - { - $URI .= "&$FullLogParamName=1"; - } + $URI .= "&$FullLogParamName=$FullLog"; $URI .= "#k" . uri_escape($Key); print "<div class='TaskMoreInfoLink'><a href='" . $self->CGI->escapeHTML($URI) . @@ -300,29 +302,46 @@ sub GenerateBody($) print "\n"; } } - my $FullLog = !1; - if (-r $LogName) + + my $LogName = "$TaskDir/log"; + my $ErrName = "$TaskDir/err"; + if (-r $LogName and $FullLog != "1") { - if (defined($self->GetParam($FullLogParamName))) - { - $FullLog = 1; - } - else - { - my $URI = $ENV{"SCRIPT_NAME"} . "?Key=" . uri_escape($self->{JobId}) . - "&$FullLogParamName=1"; - if (defined($self->GetParam($ScreenshotParamName))) - { - $URI .= "&$ScreenshotParamName=1"; - } - $URI .= "#k" . uri_escape($Key); - print "<div class='TaskMoreInfoLink'><a href='" . - $self->CGI->escapeHTML($URI) . - "'>Show full log</a></div>\n"; - } + my $URI = $ENV{"SCRIPT_NAME"} . "?Key=" . uri_escape($self->{JobId}) . + "&$FullLogParamName=1"; + $URI .= "&$ScreenshotParamName=$Screenshot"; + $URI .= "#k" . uri_escape($Key); + print "<div class='TaskMoreInfoLink'><a href='" . + $self->CGI->escapeHTML($URI) . + "'>Show full log</a></div>\n"; + } + if ((-r $LogName or -r $ErrName) and $FullLog == "2") + { + my $URI = $ENV{"SCRIPT_NAME"} . "?Key=" . uri_escape($self->{JobId}); + $URI .= "&$ScreenshotParamName=$Screenshot"; + $URI .= "#k" . uri_escape($Key); + print "<div class='TaskMoreInfoLink'><a href='" . + $self->CGI->escapeHTML($URI) . + "'>Show latest log</a></div>\n"; + } + if ((-r "$LogName.old" or -r "$ErrName.old") and $FullLog != "2") + { + my $URI = $ENV{"SCRIPT_NAME"} . "?Key=" . uri_escape($self->{JobId}) . + "&$FullLogParamName=2"; + $URI .= "&$ScreenshotParamName=$Screenshot"; + $URI .= "#k" . uri_escape($Key); + print "<div class='TaskMoreInfoLink'><a href='" . + $self->CGI->escapeHTML($URI) . + "'>Show old logs</a></div>\n"; } print "</div>\n";
+ if ($FullLog eq "2") + { + $LogName .= ".old"; + $ErrName .= ".old"; + } + if (open LOGFILE, "<$LogName") { my $HasLogEntries = !1;