* remove trailing spaces from email notification
 * option to disable email notification for jobset
This commit is contained in:
Rob Vermaas 2010-01-06 13:07:59 +00:00
parent 044edfb764
commit 8a01999220
6 changed files with 191 additions and 15 deletions

View file

@ -149,6 +149,8 @@ sub updateJobset {
, nixexprpath => $nixExprPath
, nixexprinput => $nixExprInput
, enabled => trim($c->request->params->{enabled}) eq "1" ? 1 : 0
, enableemail => trim($c->request->params->{enableemail}) eq "1" ? 1 : 0
, emailoverride => trim($c->request->params->{emailoverride})
});
my %inputNames;

View file

@ -8,6 +8,140 @@ use warnings;
use base 'DBIx::Class';
__PACKAGE__->load_components("Core");
__PACKAGE__->table("Jobsets");
__PACKAGE__->add_columns(
"name",
{
data_type => "text",
default_value => undef,
is_foreign_key => 1,
is_nullable => 0,
size => undef,
},
"project",
{
data_type => "text",
default_value => undef,
is_foreign_key => 1,
is_nullable => 0,
size => undef,
},
"description",
{
data_type => "text",
default_value => undef,
is_nullable => 1,
size => undef,
},
"nixexprinput",
{
data_type => "text",
default_value => undef,
is_foreign_key => 1,
is_nullable => 0,
size => undef,
},
"nixexprpath",
{
data_type => "text",
default_value => undef,
is_nullable => 0,
size => undef,
},
"errormsg",
{
data_type => "text",
default_value => undef,
is_nullable => 1,
size => undef,
},
"errortime",
{
data_type => "integer",
default_value => undef,
is_nullable => 1,
size => undef,
},
"lastcheckedtime",
{
data_type => "integer",
default_value => undef,
is_nullable => 1,
size => undef,
},
"enabled",
{ data_type => "integer", default_value => 1, is_nullable => 0, size => undef },
"enableemail",
{ data_type => "integer", default_value => 1, is_nullable => 0, size => undef },
"emailoverride",
{
data_type => "text",
default_value => undef,
is_nullable => 0,
size => undef,
},
);
__PACKAGE__->set_primary_key("project", "name");
__PACKAGE__->belongs_to("project", "Hydra::Schema::Projects", { name => "project" });
__PACKAGE__->belongs_to(
"jobsetinput",
"Hydra::Schema::JobsetInputs",
{ jobset => "name", name => "nixexprinput", project => "project" },
);
__PACKAGE__->has_many(
"jobsetinputs",
"Hydra::Schema::JobsetInputs",
{
"foreign.jobset" => "self.name",
"foreign.project" => "self.project",
},
);
__PACKAGE__->has_many(
"jobs",
"Hydra::Schema::Jobs",
{
"foreign.jobset" => "self.name",
"foreign.project" => "self.project",
},
);
__PACKAGE__->has_many(
"builds",
"Hydra::Schema::Builds",
{
"foreign.jobset" => "self.name",
"foreign.project" => "self.project",
},
);
__PACKAGE__->has_many(
"jobsetinputhashes",
"Hydra::Schema::JobsetInputHashes",
{
"foreign.jobset" => "self.name",
"foreign.project" => "self.project",
},
);
# Created by DBIx::Class::Schema::Loader v0.04999_09 @ 2010-01-06 10:15:26
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:buO0P7XQexj6YEwEAsq3EQ
# These lines were loaded from '/home/rbvermaa/src/hydra/src/lib/Hydra/Schema/Jobsets.pm' found in @INC.
# They are now part of the custom portion of this file
# for you to hand-edit. If you do not either delete
# this section or remove that file from @INC, this section
# will be repeated redundantly when you re-create this
# file again via Loader!
package Hydra::Schema::Jobsets;
# Created by DBIx::Class::Schema::Loader
# DO NOT MODIFY THE FIRST PART OF THIS FILE
use strict;
use warnings;
use base 'DBIx::Class';
__PACKAGE__->load_components("Core");
__PACKAGE__->table("Jobsets");
__PACKAGE__->add_columns(
@ -118,5 +252,10 @@ __PACKAGE__->has_many(
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:fVXvhb343Zw1625daVz40g
# You can replace this text with custom content, and it will be preserved on regeneration
1;
# End of lines loaded from '/home/rbvermaa/src/hydra/src/lib/Hydra/Schema/Jobsets.pm'
# You can replace this text with custom content, and it will be preserved on regeneration
1;

View file

@ -78,6 +78,18 @@
[% INCLUDE renderSelection param="enabled" curValue=jobset.enabled options={"1" = "Yes", "0" = "No"} %]
</td>
</tr>
<tr>
<th>Enable email notification:</th>
<td>
[% INCLUDE renderSelection param="enableemail" curValue=jobset.enableemail options={"1" = "Yes", "0" = "No"} %]
</td>
</tr>
<tr>
<th>Email override:</th>
<td>
[% INCLUDE maybeEditString param="emailoverride" value=jobset.emailoverride %]
</td>
</tr>
[% IF !edit %]
<tr>
<th>Last checked:</th>

View file

@ -62,32 +62,46 @@ sub sendTwitterNotification {
warn "$@\n" if $@;
}
sub sendEmailNotification {
my ($build) = @_;
die unless defined $build->resultInfo;
return if !$build->maintainers;
return if !($build->maintainers || $build->jobset->enableemail);
# Do we want to send mail?
if ($build->resultInfo->buildstatus == 0) {
# Build succeeded. Only send mail if the previous build for
# the same platform failed.
return; # TODO
my $prevBuild;
($prevBuild) = $db->resultset('Builds')->search(
{ project => $build->project->name
, jobset => $build->jobset->name
, job => $build->job->name
, system => $build->system
, finished => 1
, id => { '!=', $build->id }
}, { order_by => ["timestamp DESC"] }
);
if (defined $prevBuild && ($build->resultInfo->buildstatus == $prevBuild->resultInfo->buildstatus)) {
return;
}
# Send mail.
# !!! should use the Template Toolkit here.
print STDERR "sending mail notification to ", $build->maintainers, "\n";
my $jobName = $build->project->name . ":" . $build->jobset->name . ":" . $build->job->name;
my $status =
$build->resultInfo->buildstatus == 0 ? "SUCCEEDED" : "FAILED";
my $status = $build->resultInfo->buildstatus == 0 ? "SUCCEEDED" : "FAILED";
my $statusMsg;
if(defined $prevBuild) {
my $prevStatus = $prevBuild->resultInfo->buildstatus == 0 ? "SUCCEEDED" : "FAILED";
$statusMsg = "changed from $prevStatus to $status";
} else {
$statusMsg = $status;
}
my $sender = $config{'notification_sender'} ||
(($ENV{'USER'} || "hydra") . "@" . hostname_long);
@ -134,8 +148,8 @@ sub sendEmailNotification {
my $body = "Hi,\n"
. "\n"
. "This is to let you know that Hydra build " . $build->id
. " of job " . $jobName . " has $status.\n"
. "This is to let you know that Hydra build" . $build->id
. " of job " . $jobName . " has $statusMsg.\n"
. "\n"
. "Complete build information can be found on this page: "
. "$selfURI/build/" . $build->id . "\n"
@ -151,10 +165,13 @@ sub sendEmailNotification {
. $inputsTable->body
. "\n"
. "Regards,\n\nThe Hydra build daemon.\n";
# stripping trailing spaces from lines
$body =~ s/[\ ]+$//gm;
my $to = (!$build->jobset->emailoverride eq "") ? $build->jobset->emailoverride : $build->maintainers;
my $email = Email::Simple->create(
header => [
To => $build->maintainers,
To => $to,
From => "Hydra Build Daemon <$sender>",
Subject => "Hydra job $jobName build " . $build->id . " $status",
],
@ -198,7 +215,7 @@ sub doBuild {
"--max-silent-time 3600 --keep-going --fallback " .
"--no-build-output --log-type flat --print-build-trace " .
"--add-root " . gcRootFor $outPath . " 2>&1";
print STDERR $cmd;
my $max = $build->buildsteps->find(
{}, {select => {max => 'stepnr + 1'}, as => ['max']});
my $buildStepNr = defined $max ? $max->get_column('max') : 1;

View file

@ -160,7 +160,9 @@ sub checkJobset {
}
$msg .= "at `" . $error->{location} . "' [$bindings]:\n" . $error->{msg} . "\n\n";
}
if( !($msg eq "") ) {
setJobsetError($jobset, $msg);
}
}
@ -178,7 +180,9 @@ sub checkJobsetWrapped {
print "error evaluating jobset ", $jobset->name, ": $msg";
txn_do($db, sub {
$jobset->update({lastcheckedtime => time});
if( !($msg eq "") ) {
setJobsetError($jobset, $msg);
}
});
}
}

View file

@ -39,6 +39,8 @@ create table Jobsets (
errorTime integer, -- timestamp associated with errorMsg
lastCheckedTime integer, -- last time the scheduler looked at this jobset
enabled integer not null default 1,
enableEmail integer not null default 1,
emailOverride text not null,
primary key (project, name),
foreign key (project) references Projects(name) on delete cascade on update cascade
#ifdef SQLITE