#!/usr/bin/perl use strict; use DBI; use Template; use CGI; use vars qw($dbhost $dbname $dbuser $dbpass $dbport); require "$ENV{BFConfDir}/BuildFarmWeb.pl"; my $query = new CGI; my @members = $query->param('member'); map { s/[^a-zA-Z0-9_ -]//g; } @members; my $dsn="dbi:Pg:dbname=$dbname"; $dsn .= ";host=$dbhost" if $dbhost; $dsn .= ";port=$dbport" if $dbport; my $sort_clause = ""; my $sortby = $query->param('sortby') || 'nosort'; if ($sortby eq 'name') { $sort_clause = 'lower(sysname),'; } elsif ($sortby eq 'os') { $sort_clause = 'lower(operating_system), os_version desc,'; } elsif ($sortby eq 'compiler') { $sort_clause = "lower(compiler), compiler_version,"; } my $db = DBI->connect($dsn,$dbuser,$dbpass) or die("$dsn,$dbuser,$dbpass,$!"); # there is possibly some redundancy in this query, but it makes # a lot of the processing simpler. my $statement =< now() - '30 days'::interval ) m where name = sysname and s.status = 'approved' order by branch = 'HEAD' desc, branch desc, $sort_clause snapshot desc EOS ; my $statrows=[]; my $sth=$db->prepare($statement); $sth->execute; while (my $row = $sth->fetchrow_hashref) { next if (@members && ! grep {$_ eq $row->{sysname} } @members); $row->{build_flags} =~ s/^\{(.*)\}$/$1/; $row->{build_flags} =~ s/,/ /g; $row->{build_flags} =~ s/--((enable|with)-)?//g; $row->{build_flags} =~ s/libxml/xml/; $row->{build_flags} =~ s/\S+=\S+//g; push(@$statrows,$row); } $sth->finish; $db->disconnect; my $template = new Template({}); print "Content-Type: text/html\n\n"; $template->process(\*DATA,{statrows=>$statrows}); exit; =comment [%- BLOCK img ; flag ; END -%] [%- BLOCK imgx ; IF flag_imgs.$flag ; '' . flag . ' ' ; ELSE flag . ' ' ; END ; END -%] =cut __DATA__ [% flag_imgs = { perl = '/img/camel.png', python = '/img/python.png', debug = '/img/bug.png', pam => '/img/pam.png', cassert => '/img/cassert.png', openssl => '/img/ssl_icon.gif', nls => '/img/translateicon.gif', krb5 => '/img/krb.gif', tcl => '/img/tcl.png', xml => '/img/xml.png', 'thread-safety' => '/img/threads.gif', 'integer-datetimes' = '/img/days.png', } -%] [%- BLOCK img ; IF flag == 'depend' or flag == 'gnu-ld' ; ; ELSIF flag_imgs.$flag %][% flag %] [% ELSE %][%# flag ; ' ' %][% END ; END -%] [%- BLOCK cl %] class=" [% SWITCH bgfor -%] [%- CASE 'OK' %]pass[% CASE 'ContribCheck' %]warn[% CASE [ 'Check' 'InstallCheck' ] %]warnx[% CASE %]fail[% END %]" [%- END -%] PostgreSQL BuildFarm Status

PostgreSQL BuildFarm Status

Shown here is the latest status of each farm member for each branch it has reported on in the last 30 days.

Use the farm member link for history of that member on the relevant branch.

[% FOREACH flagset IN flag_imgs %] [% IF loop.count == 6 %][% END %] [% END %]
Legend[% flagset.key %] = [% flagset.key %]

[% brch = "" %] [% FOREACH row IN statrows %] [% IF row.branch != brch ; brch = row.branch %] [% END %] [% END %]
Branch: [% brch %]
AliasSystemStatusFlags
[% row.sysname %] [% row.operating_system %] [% row.os_version %] [%- row.compiler %] [% row.compiler_version %] [%- row.architecture %] [%- row.when_ago | replace('\s',' ') %] ago  [% row.stage -%] [%- IF row.stage != 'OK' %]Details[% ELSE %]Config[% END -%] [% FOREACH flag IN row.build_flags.split().sort() ; PROCESS img ; END %]

The PostgreSQL Buildfarm website is provided by: CommandPrompt, The PostgreSQL Company
The PostgreSQL community makes it work!