2021-04-05 19:29:45 +00:00
|
|
|
package Hydra::Event;
|
|
|
|
|
|
|
|
use strict;
|
2021-08-19 16:36:43 -04:00
|
|
|
use warnings;
|
2021-04-05 19:29:45 +00:00
|
|
|
use Hydra::Event::BuildFinished;
|
2021-12-20 13:18:32 -05:00
|
|
|
use Hydra::Event::BuildQueued;
|
2021-04-05 19:29:45 +00:00
|
|
|
use Hydra::Event::BuildStarted;
|
|
|
|
use Hydra::Event::StepFinished;
|
|
|
|
|
|
|
|
my %channels_to_events = (
|
2021-12-20 13:18:32 -05:00
|
|
|
build_queued => \&Hydra::Event::BuildQueued::parse,
|
2021-04-05 19:29:45 +00:00
|
|
|
build_started => \&Hydra::Event::BuildStarted::parse,
|
|
|
|
step_finished => \&Hydra::Event::StepFinished::parse,
|
|
|
|
build_finished => \&Hydra::Event::BuildFinished::parse,
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
sub parse_payload :prototype($$) {
|
|
|
|
my ($channel_name, $payload) = @_;
|
|
|
|
my @payload = split /\t/, $payload;
|
|
|
|
|
2021-11-29 12:19:04 -08:00
|
|
|
my $parser = $channels_to_events{$channel_name};
|
2021-04-05 19:29:45 +00:00
|
|
|
unless (defined $parser) {
|
|
|
|
die "Invalid channel name: '$channel_name'";
|
|
|
|
}
|
|
|
|
|
|
|
|
return $parser->(@payload);
|
|
|
|
}
|
2021-08-09 10:05:33 -04:00
|
|
|
|
|
|
|
|
|
|
|
sub new_event {
|
|
|
|
my ($self, $channel_name, $payload) = @_;
|
|
|
|
|
|
|
|
return bless {
|
|
|
|
"channel_name" => $channel_name,
|
|
|
|
"payload" => $payload,
|
|
|
|
"event" => parse_payload($channel_name, $payload),
|
|
|
|
}, $self;
|
|
|
|
}
|
2021-08-11 12:42:17 -04:00
|
|
|
|
2021-12-21 14:27:33 -05:00
|
|
|
sub interestedIn {
|
2021-12-20 13:27:59 -05:00
|
|
|
my ($self, $plugin) = @_;
|
|
|
|
|
|
|
|
return $self->{"event"}->interestedIn($plugin);
|
|
|
|
}
|
|
|
|
|
2021-08-11 12:42:17 -04:00
|
|
|
sub execute {
|
|
|
|
my ($self, $db, $plugin) = @_;
|
|
|
|
return $self->{"event"}->execute($db, $plugin);
|
|
|
|
}
|