summaryrefslogtreecommitdiffstats
path: root/Bugzilla
diff options
context:
space:
mode:
authorGervase Markham <gerv@gerv.net>2011-01-05 12:48:49 +0100
committerGervase Markham <gerv@mozilla.org>2011-01-05 12:48:49 +0100
commitf6a3f8319d442e832edc901ff12169ba17dceb81 (patch)
tree6626516d9161aa9ca50e1c92dcb6b4dc7ac24591 /Bugzilla
parent237e21f002e1211113976fd08fce793e7f03c73e (diff)
downloadbugzilla-f6a3f8319d442e832edc901ff12169ba17dceb81.tar.gz
bugzilla-f6a3f8319d442e832edc901ff12169ba17dceb81.tar.xz
Allow extensions to add new Jobs. r,a=mkanat.
https://bugzilla.mozilla.org/show_bug.cgi?id=617012
Diffstat (limited to 'Bugzilla')
-rw-r--r--Bugzilla/Hook.pm17
-rw-r--r--Bugzilla/JobQueue.pm12
-rw-r--r--Bugzilla/JobQueue/Runner.pm2
3 files changed, 29 insertions, 2 deletions
diff --git a/Bugzilla/Hook.pm b/Bugzilla/Hook.pm
index f6fff241a..b48ebb9fa 100644
--- a/Bugzilla/Hook.pm
+++ b/Bugzilla/Hook.pm
@@ -730,6 +730,23 @@ database when run.
=back
+=head2 job_map
+
+Bugzilla has a system - L<Bugzilla::JobQueue> - for running jobs
+asynchronously, if the administrator has set it up. This hook allows the
+addition of mappings from job names to handler classes, so an extension can
+fire off jobs.
+
+Params:
+
+=over
+
+=item C<job_map> - The job map hash. Key: the name of the job, as should be
+passed to Bugzilla->job_queue->insert(). Value: the name of the Perl module
+which implements the task (an instance of L<TheSchwartz::Worker>).
+
+=back
+
=head2 mailer_before_send
Called right before L<Bugzilla::Mailer> sends a message to the MTA.
diff --git a/Bugzilla/JobQueue.pm b/Bugzilla/JobQueue.pm
index 1046cf2c3..2804b9179 100644
--- a/Bugzilla/JobQueue.pm
+++ b/Bugzilla/JobQueue.pm
@@ -35,6 +35,16 @@ use constant JOB_MAP => {
send_mail => 'Bugzilla::Job::Mailer',
};
+sub job_map {
+ if (!defined(Bugzilla->request_cache->{job_map})) {
+ my $job_map = JOB_MAP;
+ Bugzilla::Hook::process('job_map', { job_map => $job_map });
+ Bugzilla->request_cache->{job_map} = $job_map;
+ }
+
+ return Bugzilla->request_cache->{job_map};
+}
+
sub new {
my $class = shift;
@@ -69,7 +79,7 @@ sub insert {
my $self = shift;
my $job = shift;
- my $mapped_job = JOB_MAP->{$job};
+ my $mapped_job = Bugzilla::JobQueue->job_map()->{$job};
ThrowCodeError('jobqueue_no_job_mapping', { job => $job })
if !$mapped_job;
unshift(@_, $mapped_job);
diff --git a/Bugzilla/JobQueue/Runner.pm b/Bugzilla/JobQueue/Runner.pm
index 8cfc965eb..20cf6439f 100644
--- a/Bugzilla/JobQueue/Runner.pm
+++ b/Bugzilla/JobQueue/Runner.pm
@@ -201,7 +201,7 @@ sub gd_run {
my $jq = Bugzilla->job_queue();
$jq->set_verbose($self->{debug});
- foreach my $module (values %{ Bugzilla::JobQueue::JOB_MAP() }) {
+ foreach my $module (values %{ Bugzilla::JobQueue->job_map() }) {
eval "use $module";
$jq->can_do($module);
}