8 use vars qw($dbhost $dbname $dbuser $dbpass $dbport);
11 require "$ENV{BFConfDir}/BuildFarmWeb.pl";
14 my @members = $query->param('member');
15 map { s/[^a-zA-Z0-9_ -]//g; } @members;
17 my $dsn="dbi:Pg:dbname=$dbname";
18 $dsn .= ";host=$dbhost" if $dbhost;
19 $dsn .= ";port=$dbport" if $dbport;
23 my $sortby = $query->param('sortby') || 'nosort';
24 if ($sortby eq 'name')
26 $sort_clause = 'lower(sysname),';
28 elsif ($sortby eq 'os')
30 $sort_clause = 'lower(operating_system), os_version desc,';
32 elsif ($sortby eq 'compiler')
34 $sort_clause = "lower(compiler), compiler_version,";
37 my $db = DBI->connect($dsn,$dbuser,$dbpass) or die("$dsn,$dbuser,$dbpass,$!");
39 # there is possibly some redundancy in this query, but it makes
40 # a lot of the processing simpler.
45 select when_ago, sysname, snapshot, status, stage, branch, build_flags,
46 operating_system, os_version, compiler, compiler_version, architecture
48 order by branch = 'HEAD' desc,
49 branch desc, $sort_clause
56 my $sth=$db->prepare($statement);
58 while (my $row = $sth->fetchrow_hashref)
60 next if (@members && ! grep {$_ eq $row->{sysname} } @members);
61 $row->{build_flags} =~ s/^\{(.*)\}$/$1/;
62 $row->{build_flags} =~ s/,/ /g;
63 $row->{build_flags} =~ s/--((enable|with)-)?//g;
64 $row->{build_flags} =~ s/libxml/xml/;
65 $row->{build_flags} =~ s/\S+=\S+//g;
66 push(@$statrows,$row);
74 my $template = new Template({});
76 print "Content-Type: text/html\n\n";
78 $template->process(\*DATA,{statrows=>$statrows});
84 [%- BLOCK img ; flag ; END -%]
85 [%- BLOCK imgx ; IF flag_imgs.$flag ; '<img src="' . flag_imgs{flag} . '" alt="' . flag . '" /> ' ; ELSE flag . ' ' ; END ; END -%]
92 perl = '/img/camel.png',
93 python = '/img/python.png',
94 debug = '/img/bug.png',
95 pam => '/img/pam.png',
96 cassert => '/img/cassert.png',
97 openssl => '/img/ssl_icon.gif',
98 nls => '/img/translateicon.gif',
99 krb5 => '/img/krb.gif',
100 tcl => '/img/tcl.png',
101 xml => '/img/xml.png',
102 'thread-safety' => '/img/threads.gif',
103 'integer-datetimes' = '/img/days.png',
106 [%- BLOCK img ; IF flag == 'depend' or flag == 'gnu-ld' ; ; ELSIF flag_imgs.$flag %]<img src="[% flag_imgs.$flag %]" title="[% flag %]" alt="[% flag %]" height="16" width="16" class="inline" align="bottom" /> [% ELSE %][%#
109 [%- BLOCK cl %] class=" [% SWITCH bgfor -%]
110 [%- CASE 'OK' %]pass[% CASE 'ContribCheck' %]warn[% CASE [ 'Check' 'InstallCheck' ] %]warnx[% CASE %]fail[% END %]"
112 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
113 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
114 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
116 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
117 <title>PostgreSQL BuildFarm Status</title>
118 <link rel="icon" type="image/png" href="/elephant-icon.png" />
119 <link rel="stylesheet" rev="stylesheet" href="/inc/pgbf.css" charset="utf-8" />
120 <style type="text/css"><!--
121 li#status a { color:rgb(17,45,137); background: url(/inc/b/r.png) no-repeat 100% -20px; }
122 li#status { background: url(/inc/b/l.png) no-repeat 0% -20px; }
128 <a href="/index.html"><img src="/inc/pgbuildfarm-banner.png" alt="PostgreSQL BuildFarm" width="800" height="73" /></a>
131 <li id="home"><a href="/index.html" title="PostgreSQL BuildFarm Home">Home</a></li>
132 <li id="status"><a href="/cgi-bin/show_status.pl" title="Current results">Status</a></li>
133 <li id="members"><a href="/cgi-bin/show_members.pl" title="Platforms tested">Members</a></li>
134 <li id="register"><a href="/register.html" title="Join PostgreSQL BuildFarm">Register</a></li>
135 <li id="pgfoundry"><a href="http://pgfoundry.org/projects/pgbuildfarm/">PGFoundry</a></li>
136 <li id="postgresql.org"><a href="http://www.postgresql.org">PostgreSQL.org</a></li>
139 </div><!-- banner -->
141 <h1>PostgreSQL BuildFarm Status</h1>
143 Shown here is the latest status of each farm member
144 for each branch it has reported on in the last 30 days.
147 Use the farm member link for history of that member
148 on the relevant branch.
150 <table><tr><th class="head" rowspan="2">Legend</th>
151 [% FOREACH flagset IN flag_imgs %]
152 <td><img src="[% flagset.value %]" title="[% flagset.key %]" alt="[% flagset.key %]" height="16" width="16" class="inline" align="center"/> = [% flagset.key %]</td>
153 [% IF loop.count == 6 %]</tr><tr>[% END %]
157 <table cellspacing="0">
159 [% FOREACH row IN statrows %]
160 [% IF row.branch != brch ; brch = row.branch %]
161 <tr><th class="head" colspan="4">Branch: [% brch %]</th></tr>
162 <tr><th>Alias</th><th>System</th><th>Status</th><th>Flags</th></tr>
164 <tr [% PROCESS cl bgfor=row.stage %]>
166 href="show_history.pl?nm=[% row.sysname %]&br=[% row.branch %]"
168 >[% row.sysname %]</a></td>
169 <td><span class="opsys">[% row.operating_system %]
170 [% row.os_version %]</span> <span class="compiler">
172 [% row.compiler_version %]</span> <span class="arch">
173 [%- row.architecture %]</span></td>
175 [%- row.when_ago | replace('\s',' ') %] ago
177 <a href="show_log.pl?nm=
178 [%- row.sysname %]&dt=
179 [%- row.snapshot | uri %]">
180 [%- IF row.stage != 'OK' %]Details[% ELSE %]Config[% END -%]</a></td>
182 <td class="flags">[% FOREACH flag IN row.build_flags.split().sort() ; PROCESS img ; END %]</td>
188 <p style="text-align: center;">
189 The PostgreSQL Buildfarm website is provided by:
190 <a href="http://www.commandprompt.com">CommandPrompt,
191 The PostgreSQL Company</a> <br />
192 The PostgreSQL community makes it work!
194 </div><!-- wrapper -->