remove unnecessary build_status_latest processing - we already have a latest_snapshot...
[buildfarm-server.git] / cgi-bin / show_members.pl
1 #!/usr/bin/perl
2
3 use strict;
4 use CGI;
5 use DBI;
6 use Template;
7
8
9
10 use vars qw($dbhost $dbname $dbuser $dbpass $dbport $template_dir $sort_by);
11
12
13 require "$ENV{BFConfDir}/BuildFarmWeb.pl";
14 #require "BuildFarmWeb.pl";
15
16 my $query = new CGI;
17 my %sort_ok = ('name' => 'lower(name)' , 
18                'owner' => 'lower(owner_email)', 
19                'os' => 'lower(operating_system), os_version', 
20                'compiler' => 'lower(compiler), compiler_version' ,
21                'arch' => 'lower(architecture)' );
22 $sort_by = $query->param('sort_by');$sort_by =~ s/[^a-zA-Z0-9_ -]//g;
23 $sort_by = $sort_ok{$sort_by} || $sort_ok{name};
24
25 my $dsn="dbi:Pg:dbname=$dbname";
26 $dsn .= ";host=$dbhost" if $dbhost;
27 $dsn .= ";port=$dbport" if $dbport;
28
29 my $db = DBI->connect($dsn,$dbuser,$dbpass);
30
31 # there is possibly some redundancy in this query, but it makes
32 # a lot of the processing simpler.
33
34 my $statement = q{
35
36   select name, operating_system, os_version, compiler, compiler_version, owner_email, 
37     architecture as arch, ARRAY(
38                                 select branch || ':' || 
39                                        extract(days from now() - l.snapshot)
40                                 from latest_snapshot l 
41                                 where l.sysname = s.name
42                                 order by branch <> 'HEAD', branch desc 
43                                 ) as branches, 
44                           ARRAY(select compiler_version || '\t' ||  os_version || '\t' || effective_date
45                                 from personality p
46                                 where p.name = s.name 
47                                 order by effective_date
48                                 ) as personalities
49   from buildsystems s
50   where status = 'approved'
51 };
52
53 $statement .= "order by $sort_by";
54
55 my $statrows=[];
56 my $sth=$db->prepare($statement);
57 $sth->execute;
58 while (my $row = $sth->fetchrow_hashref)
59 {
60     $row->{branches} =~ s/^\{(.*)\}$/$1/;
61     my $personalities = $row->{personalities};
62     $personalities =~ s/^\{(.*)\}$/$1/;
63     my @personalities = split($personalities,',');
64     $row->{personalities} = [];
65     foreach my $personality (@personalities)
66     {
67         $personality =~ s/^"(.*)"$/$1/;
68         $personality =~ s/\\(.)/$1/g;
69         my ($compiler_version, $os_version, $effective_date) = split(/\t/,$personality);
70         push(@{$row->{personalities}}, {compiler_version => $compiler_version, 
71                                         os_version => $os_version, 
72                                         effective_date => $effective_date });
73     }
74     $row->{owner_email} =~ s/\@/ [ a t ] /;
75     push(@$statrows,$row);
76 }
77 $sth->finish;
78
79
80 $db->disconnect;
81
82 # use Data::Dumper; print "Content-Type: text/plain\n\n",Dumper($statrows),"VERSION: ",$DBD::Pg::VERSION,"\n"; exit;
83
84
85 my $template_opts = { INCLUDE_PATH => $template_dir};
86 my $template = new Template($template_opts);
87
88 print "Content-Type: text/html\n\n";
89
90 $template->process('members.tt',
91                 {statrows=>$statrows});
92
93 exit;
94