X-Git-Url: https://git.exim.org/buildfarm-server.git/blobdiff_plain/2e86f437603ee6977c9ca751e97e490ce2768584..9aab6bac9c2c174a5ef8869e9b947a3917e18087:/cgi-bin/show_log.pl?dt=-%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%25-%20row.snapshot%20%7C%20uri%20%25%5D;nm=-%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%25-%20row.sysname%20%25%5D diff --git a/cgi-bin/show_log.pl b/cgi-bin/show_log.pl index 929af0d..b2c5646 100755 --- a/cgi-bin/show_log.pl +++ b/cgi-bin/show_log.pl @@ -1,16 +1,24 @@ #!/usr/bin/perl +=comment + +Copyright (c) 2003-2010, Andrew Dunstan + +See accompanying License file for license details + +=cut + use strict; use DBI; use Template; use CGI; -use URI::Escape; - -use vars qw($dbhost $dbname $dbuser $dbpass $dbport @log_file_names); +use vars qw($dbhost $dbname $dbuser $dbpass $dbport $template_dir @log_file_names); require "$ENV{BFConfDir}/BuildFarmWeb.pl"; -#require "BuildFarmWeb.pl"; + +my $template_opts = { INCLUDE_PATH => $template_dir, EVAL_PERL => 1}; +my $template = new Template($template_opts); die "no dbname" unless $dbname; die "no dbuser" unless $dbuser; @@ -22,30 +30,30 @@ $dsn .= ";port=$dbport" if $dbport; my $query = new CGI; my $system = $query->param('nm'); $system =~ s/[^a-zA-Z0-9_ -]//g; -my $logdate = $query->param('dt'); $logdate =~ s/[^a-zA-Z0-9_ -]//g; +my $logdate = $query->param('dt'); $logdate =~ s/[^a-zA-Z0-9_ :-]//g; my $log = ""; my $conf = ""; -my ($stage,$changed_this_run,$changed_since_success,$sysinfo,$branch); +my ($stage,$changed_this_run,$changed_since_success,$sysinfo,$branch,$scmurl); +my $scm; use vars qw($info_row); if ($system && $logdate) { - my $db = DBI->connect($dsn,$dbuser,$dbpass); + my $db = DBI->connect($dsn,$dbuser,$dbpass,{pg_expand_array => 0}); die $DBI::errstr unless $db; - my $statement = <prepare($statement); $sth->execute($system,$logdate); my $row=$sth->fetchrow_arrayref; @@ -56,272 +64,79 @@ EOS $changed_since_success = $row->[4]; $branch = $row->[5]; my $log_file_names = $row->[6]; + $scm = $row->[7]; + $scm ||= 'cvs'; # legacy scripts + $scmurl = $row->[8]; $log_file_names =~ s/^\{(.*)\}$/$1/; @log_file_names=split(',',$log_file_names) if $log_file_names; $sth->finish; - $statement = <prepare($statement); $sth->execute($system); $info_row=$sth->fetchrow_hashref; - $sysinfo = join(" ",@$row); + + my $latest_personality = $db->selectrow_arrayref(q{ + select os_version, compiler_version + from personality + where effective_date < ? + and name = ? + order by effective_date desc limit 1 + }, undef, $logdate, $system); + # $sysinfo = join(" ",@$row); + if ($latest_personality) + { + $info_row->{os_version} = $latest_personality->[0]; + $info_row->{compiler_version} = $latest_personality->[1]; + } $sth->finish; $db->disconnect; } foreach my $chgd ($changed_this_run,$changed_since_success) { + my $cvsurl = 'http://anoncvs.postgresql.org/cvsweb.cgi'; + my $giturl = $scmurl || 'http://git.postgresql.org/gitweb?p=postgresql.git;a=commit;h='; my @lines = split(/!/,$chgd); + my $changed_rows = []; foreach (@lines) { - next unless m!^pgsql/!; - s!(^\S+)(\s+)(\S+)!$1$2$3!; + next if ($scm eq 'cvs' and ! m!^(pgsql|master|REL\d_\d_STABLE)/!); + push(@$changed_rows,[$1,$3]) if (m!(^\S+)(\s+)(\S+)!); } - $chgd = join("\n",@lines); - $chgd ||= 'not recorded'; - + $chgd = $changed_rows; } $conf =~ s/\@/ [ a t ] /g; -map {s/&/&/g; s//>/g; s/\"/"/g;} ($log,$conf); -# map {s/!/\n/g} ($changed_this_run,$changed_since_success); - - -use POSIX qw(ceil); -my $lrfactor = 7; -my $logrows = ceil(scalar(@log_file_names)/$lrfactor); -my $logcells = $lrfactor * $logrows; - -my $heading_done; -my $urldt = uri_escape($logdate); - -my $cell = 0; - - print "Content-Type: text/html\n\n"; -if ($stage eq 'OK') -{ - print < - - - - PostgreSQL BuildFarm | Configuration summary for system "$system" - - - - -
- -
-

PostgreSQL Build Farm Log

- - - - - - - - - - - - - - - - - - -
System InformationFarm memberBranchOSCompilerArchitectureOwner
$system$branch$info_row->{operating_system} $info_row->{os_version}$info_row->{compiler} $info_row->{compiler_version}$info_row->{architecture}$info_row->{owner_email}
-EOHTML - -for my $logstage (@log_file_names) -{ - print "
\n" - unless $heading_done; - $heading_done = 1; - $cell++; - $logstage =~ s/\.log$//; - print "\n" if ($cell > 1 && $cell % $lrfactor == 1); - print "\n"; - print "\n" if ($cell % $lrfactor == 0); -} - -if ($cell) -{ - foreach my $rcell ($cell+1 .. $logcells) - { - print "\n" if ($rcell > 1 && $rcell % $lrfactor == 1); - print "\n"; - print "\n" if ($rcell % $lrfactor == 0); - } - print "
Stage Logs
$logstage
 
\n"; -} - -print < -

Configuration summary for system "$system"

-

Status 'OK' on snapshot taken $logdate

-
-$conf
-
-

Files changed this run

-
-$changed_this_run
-
-EOHTML -print <Log -
-$log
-
-EOHTML - print < -
-

-Hosting for the PostgreSQL Buildfarm is generously -provided by: -CommandPrompt, -The PostgreSQL Company -

-
- - -EOHTML -; - - exit; -} - -print < - - - - PostgreSQL BuildFarm | Log for system "$system" failure on snapshot taken $logdate - - - -
- -
-

PostgreSQL Build Farm Log

-

Details for system "$system" failure at stage $stage on snapshot taken $logdate

- - - - - - - - - - - - - - - - - - -
System InformationFarm memberBranchOSCompilerArchitectureOwner
$system$branch$info_row->{operating_system} $info_row->{os_version}$info_row->{compiler} $info_row->{compiler_version}$info_row->{architecture}$info_row->{owner_email}
-EOHTML - -for my $logstage (@log_file_names) -{ - print "
\n" - unless $heading_done; - $heading_done = 1; - $cell++; - $logstage =~ s/\.log$//; - print "\n" if ($cell > 1 && $cell % $lrfactor == 1); - print "\n"; - print "\n" if ($cell % $lrfactor == 0); -} - -if ($cell) -{ - foreach my $rcell ($cell+1 .. $logcells) - { - print "\n" if ($rcell > 1 && $rcell % $lrfactor == 1); - print "\n"; - print "\n" if ($rcell % $lrfactor == 0); - } - print "
Stage Logs
$logstage
 
\n"; -} - -print <Configuration summary -
-$conf
-
-

Files changed this run

-
-$changed_this_run
-
-

Files changed since last success

-
-$changed_since_success
-
-

Log

-
-$log
-
-
-
-

-Hosting for the PostgreSQL Buildfarm is generously -provided by: -CommandPrompt, -The PostgreSQL Company -

-
- - -EOHTML -; - - - +$template->process('log.tt', + { + scm => $scm, + scmurl => $scmurl, + system => $system, + branch => $branch, + stage => $stage, + urldt => $logdate, + log_file_names => \@log_file_names, + conf => $conf, + log => $log, + changed_this_run => $changed_this_run, + changed_since_success => $changed_since_success, + info_row => $info_row, + + });