31
32
@Buildd::ISA = qw(Exporter);
33
34
@Buildd::EXPORT = qw(unset_env lock_file unlock_file open_log
34
reopen_log close_log logger send_mail
35
ll_send_mail exitstatus write_stats);
35
reopen_log close_log send_mail
36
ll_send_mail exitstatus isin
37
39
$Buildd::lock_interval = 15;
38
40
$Buildd::max_lock_trys = 120;
39
41
($Buildd::progname = $0) =~ s,.*/,,;
42
$Buildd::progpid = $$;
40
43
my @pwinfo = getpwuid($>);
41
44
$Buildd::username = $pwinfo[0];
42
45
$Buildd::gecos = $pwinfo[6];
136
138
unlink( $lockfile );
140
sub write_stats ($$) {
141
my ($cat, $val) = @_;
144
lock_file( "$main::HOME/stats" );
145
open( F, ">>$main::HOME/stats/$cat" );
148
unlock_file( "$main::HOME/stats" );
152
open( LOG, ">>$main::HOME/daemon.log" )
153
or die "$0: Cannot open my logfile $main::HOME/daemon.log: $!\n";
154
chmod( 0640, "$main::HOME/daemon.log" )
155
or die "$0: Cannot set modes of $main::HOME/daemon.log: $!\n";
156
select( (select(LOG), $| = 1)[0] );
157
open( STDOUT, ">&LOG" )
158
or die "$0: Can't redirect stdout to $main::HOME/daemon.log: $!\n";
159
open( STDERR, ">&LOG" )
160
or die "$0: Can't redirect stderr to $main::HOME/daemon.log: $!\n";
167
# omit weekday and year for brevity
168
($t = localtime) =~ /^\w+\s(.*)\s\d+$/; $t = $1;
169
foreach (@_) { $text .= $_; }
170
$text =~ s/\n+$/\n/; # remove newlines at end
171
$text .= "\n" if $text !~ /\n$/; # ensure newline at end
172
$text =~ s/^/$t $Buildd::progname: /mg;
144
my $logfile = $conf->get('DAEMON_LOG_FILE');
146
my $log = new FileHandle(">>$logfile")
147
or die "$0: Cannot open logfile $logfile: $!\n";
148
chmod( 0640, "$logfile" )
149
or die "$0: Cannot set modes of $logfile: $!\n";
158
# omit weekday and year for brevity
159
($t = localtime) =~ /^\w+\s(.*)\s\d+$/; $t = $1;
160
$message =~ s/\n+$//; # remove newlines at end
161
$message = "$t $Buildd::progname\[$Buildd::progpid\]: $message\n";
166
return Sbuild::LogBase::open_log($conf, $log, $logfunc);
172
Sbuild::LogBase::close_log($conf);
206
202
my $text = shift;
205
# TODO: Don't log to STDERR: Implement as class method using
206
# standard pipe interface using normal log streams.
209
208
$text =~ s/^\.$/../mg;
210
209
local $SIG{'PIPE'} = 'IGNORE';
211
210
if (!open( MAIL, "|/usr/sbin/sendmail -oem '$to'" )) {
212
logger( "Could not open pipe to /usr/sbin/sendmail: $!\n" );
211
print STDERR "Could not open pipe to /usr/sbin/sendmail: $!\n";
215
214
print MAIL $text;
216
215
if (!close( MAIL )) {
217
logger( "sendmail failed (exit status ", exitstatus($?), ")\n" );
216
print STDERR "sendmail failed (exit status ", exitstatus($?), ")\n";
224
222
sub exitstatus ($) {
225
223
my $stat = shift;
227
225
return ($stat >> 8) . "/" . ($stat % 256);
228
sub wannabuild_command ($) {
231
my @command = ($conf->get('SSH_CMD'), 'wanna-build');
232
push(@command, "--database=" . $conf->get('WANNA_BUILD_DBBASE'))
233
if $conf->get('WANNA_BUILD_DBBASE');
234
push(@command, "--user=" . $conf->get('WANNA_BUILD_USER'))
235
if $conf->get('WANNA_BUILD_USER');