forked from lix-project/hydra
Use OO-style plugins
This is mostly so we don't have to pass around common parameters like "db" and "config", and we don't have to check for the existence of methods. A plugin now looks like this: package Hydra::Plugin::TwitterNotification; use parent 'Hydra::Plugin'; sub buildFinished { my ($self, $build, $dependents) = @_; print STDERR "tweeting about build ", $build->id, "\n"; # Send tweet... # Hydra database is $self->{db}. }
This commit is contained in:
parent
a420a33f66
commit
44b8d6f449
|
@ -1,14 +1,23 @@
|
||||||
package Hydra::Plugin;
|
package Hydra::Plugin;
|
||||||
|
|
||||||
|
use strict;
|
||||||
use Module::Pluggable
|
use Module::Pluggable
|
||||||
search_path => "Hydra::Plugin",
|
search_path => "Hydra::Plugin",
|
||||||
require => 1;
|
instantiate => 'new';
|
||||||
|
|
||||||
|
sub new {
|
||||||
|
my ($class, %args) = @_;
|
||||||
|
my $self = { db => $args{db}, config => $args{config} };
|
||||||
|
bless $self, $class;
|
||||||
|
return $self;
|
||||||
|
}
|
||||||
|
|
||||||
# $plugin->buildFinished($db, $config, $build, $dependents):
|
|
||||||
#
|
|
||||||
# Called when build $build has finished. If the build failed, then
|
# Called when build $build has finished. If the build failed, then
|
||||||
# $dependents is an array ref to a list of builds that have also
|
# $dependents is an array ref to a list of builds that have also
|
||||||
# failed as a result (i.e. because they depend on $build or a failed
|
# failed as a result (i.e. because they depend on $build or a failed
|
||||||
# dependeny of $build).
|
# dependeny of $build).
|
||||||
|
sub buildFinished {
|
||||||
|
my ($self, $build, $dependents) = @_;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package Hydra::Plugin::EmailNotification;
|
package Hydra::Plugin::EmailNotification;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use parent 'Hydra::Plugin';
|
||||||
use feature qw/switch/;
|
use feature qw/switch/;
|
||||||
use POSIX qw(strftime);
|
use POSIX qw(strftime);
|
||||||
use Email::Sender::Simple qw(sendmail);
|
use Email::Sender::Simple qw(sendmail);
|
||||||
|
@ -29,12 +30,12 @@ sub statusDescription {
|
||||||
|
|
||||||
|
|
||||||
sub buildFinished {
|
sub buildFinished {
|
||||||
my ($self, $db, $config, $build, $dependents) = @_;
|
my ($self, $build, $dependents) = @_;
|
||||||
|
|
||||||
die unless $build->finished;
|
die unless $build->finished;
|
||||||
|
|
||||||
my $prevBuild;
|
my $prevBuild;
|
||||||
($prevBuild) = $db->resultset('Builds')->search(
|
($prevBuild) = $self->{db}->resultset('Builds')->search(
|
||||||
{ project => $build->project->name
|
{ project => $build->project->name
|
||||||
, jobset => $build->jobset->name
|
, jobset => $build->jobset->name
|
||||||
, job => $build->job->name
|
, job => $build->job->name
|
||||||
|
@ -68,10 +69,10 @@ sub buildFinished {
|
||||||
my $status = statusDescription($build->buildstatus);
|
my $status = statusDescription($build->buildstatus);
|
||||||
|
|
||||||
my $baseurl = hostname_long;
|
my $baseurl = hostname_long;
|
||||||
my $sender = $config->{'notification_sender'} ||
|
my $sender = $self->{config}->{'notification_sender'} ||
|
||||||
(($ENV{'USER'} || "hydra") . "@" . $baseurl);
|
(($ENV{'USER'} || "hydra") . "@" . $baseurl);
|
||||||
|
|
||||||
my $selfURI = $config->{'base_uri'} || "http://localhost:3000";
|
my $selfURI = $self->{config}->{'base_uri'} || "http://localhost:3000";
|
||||||
|
|
||||||
sub showTime { my ($x) = @_; return strftime('%Y-%m-%d %H:%M:%S', localtime($x)); }
|
sub showTime { my ($x) = @_; return strftime('%Y-%m-%d %H:%M:%S', localtime($x)); }
|
||||||
|
|
||||||
|
@ -163,4 +164,5 @@ sub buildFinished {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
|
@ -17,6 +17,8 @@ my $db = Hydra::Model::DB->new();
|
||||||
|
|
||||||
my $config = getHydraConfig();
|
my $config = getHydraConfig();
|
||||||
|
|
||||||
|
my @plugins = Hydra::Plugin->plugins(db => $db, config => $config);
|
||||||
|
|
||||||
|
|
||||||
sub addBuildStepOutputs {
|
sub addBuildStepOutputs {
|
||||||
my ($step) = @_;
|
my ($step) = @_;
|
||||||
|
@ -79,10 +81,9 @@ sub failDependents {
|
||||||
|
|
||||||
sub notify {
|
sub notify {
|
||||||
my ($build, $dependents) = @_;
|
my ($build, $dependents) = @_;
|
||||||
foreach my $plugin (Hydra::Plugin->plugins) {
|
foreach my $plugin (@plugins) {
|
||||||
next unless $plugin->can('buildFinished');
|
|
||||||
eval {
|
eval {
|
||||||
$plugin->buildFinished($db, $config, $build, []);
|
$plugin->buildFinished($build, []);
|
||||||
};
|
};
|
||||||
if ($@) {
|
if ($@) {
|
||||||
print STDERR "$plugin->buildFinished: $@\n";
|
print STDERR "$plugin->buildFinished: $@\n";
|
||||||
|
|
Loading…
Reference in a new issue