add filtering to failures page.
[buildfarm-server.git] / bf-alerts.pl
index c118cc4e29ff4739fb4fba1c3216d9576e942723..091b55849ce5e9c6269f308fa4def9ff304fd157 100755 (executable)
@@ -1,5 +1,13 @@
 #!/usr/bin/perl
 
+=comment
+
+Copyright (c) 2003-2010, Andrew Dunstan
+
+See accompanying License file for license details
+
+=cut 
+
 use strict;
 
 use Digest::SHA1  qw(sha1_hex);
@@ -8,10 +16,11 @@ use DBI;
 use DBD::Pg;
 use Data::Dumper;
 use Mail::Send;
-use Safe;
+use Storable qw(thaw);
 
 use vars qw($dbhost $dbname $dbuser $dbpass $dbport
        $all_stat $fail_stat $change_stat $green_stat
+       $default_host
 );
 
 require "$ENV{BFConfDir}/BuildFarmWeb.pl";
@@ -44,7 +53,7 @@ my $sth = $db->prepare(q[
     SELECT DISTINCT ON (sysname, branch) 
         sysname, branch, 
         extract(epoch from snapshot at time zone 'GMT')::int as snapshot, 
-        conf_sum as config
+        frozen_conf as config
     FROM build_status s join buildsystems b on (s.sysname = b.name)
     WHERE NOT b.no_alerts and
        snapshot > current_timestamp - interval '30 days'
@@ -107,14 +116,11 @@ print "starting alert run: $lts\n";
 
 foreach my $sysbranch (@last_heard)
 {
-    # eval the config in a Safe container to protect ourselves
-    my $container = new Safe;
-    my $sconf = $sysbranch->{config}; 
-    unless ($sconf =~ s/.*(\$Script_Config)/$1/ms )
-    {
-       $sconf = '$Script_Config={};';
-    }
-    my $client_conf = $container->reval("$sconf;");
+       # not all versions of DBD::Pg decode modern bytea literals nicely. cope.
+       $sysbranch->{config} =~ s/^(\\?x)([a-fA-F0-9]+)$/pack('H*',$2)/e;
+
+
+    my $client_conf = thaw $sysbranch->{config};
 
     my %client_alert_settings = %{ $client_conf->{alerts} || {} };
     my $setting = $client_alert_settings{$sysbranch->{branch}};
@@ -193,8 +199,11 @@ my $addr_sth = $db->prepare(q[
 
 
 my $me = `id -un`; chomp $me;
+my $host = `hostname`; chomp ($host);
+$host = $default_host unless ($host =~ m/[.]/ || !defined($default_host));
 
-my $host = `hostname`; chomp $host;
+my $from_addr = "PG Build Farm <$me\@$host>";
+$from_addr =~ tr /\r\n//d;
 
 
 
@@ -216,7 +225,7 @@ foreach my $clearme (@need_cleared)
     }
     my $msg = new Mail::Send;
 
-    $msg->set('From',"PG Build Farm <$me\@$host>");
+    $msg->set('From',$from_addr);
 
     $addr_sth->execute($animal);
 
@@ -235,16 +244,16 @@ foreach my $clearme (@need_cleared)
     print "alert cleared $animal $branch\n";
 }
 
-foreach my $clearme (@need_alerts)
+foreach my $needme (@need_alerts)
 {
-    my ($sysbranch, $setting) = @$clearme;
+    my ($sysbranch, $setting) = @$needme;
     my ($animal, $branch) = ($sysbranch->{sysname},$sysbranch->{branch});
     my $hours = sprintf("%.2f",($now - $sysbranch->{snapshot}) / 3600);
     my $text = "$sysbranch->{sysname} has not reported " .
        "on $sysbranch->{branch} for $hours hours.";
     my $msg = new Mail::Send;
 
-    $msg->set('From',"PG Build Farm <$me\@$host>");
+    $msg->set('From',$from_addr);
 
     $addr_sth->execute($animal);