forked from lix-project/hydra
hydra
* remove trailing spaces from email notification * option to disable email notification for jobset
This commit is contained in:
parent
044edfb764
commit
8a01999220
6 changed files with 191 additions and 15 deletions
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -160,7 +160,9 @@ sub checkJobset {
|
|||
}
|
||||
$msg .= "at `" . $error->{location} . "' [$bindings]:\n" . $error->{msg} . "\n\n";
|
||||
}
|
||||
setJobsetError($jobset, $msg);
|
||||
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});
|
||||
setJobsetError($jobset, $msg);
|
||||
if( !($msg eq "") ) {
|
||||
setJobsetError($jobset, $msg);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue