#!/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);
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";
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'
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}};
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;
}
my $msg = new Mail::Send;
- $msg->set('From',"PG Build Farm <$me\@$host>");
+ $msg->set('From',$from_addr);
$addr_sth->execute($animal);
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);