From 8a3d4469cc85108a194a78ac95f2a6780d2971eb Mon Sep 17 00:00:00 2001 From: "mkanat%bugzilla.org" <> Date: Wed, 24 Dec 2008 03:43:36 +0000 Subject: Bug 284184: Allow Bugzilla to use an asynchronous job queue for sending mail. Patch By Max Kanat-Alexander and Mark Smith r=glob, a=mkanat --- Bugzilla/JobQueue/Runner.pm | 97 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 Bugzilla/JobQueue/Runner.pm (limited to 'Bugzilla/JobQueue') diff --git a/Bugzilla/JobQueue/Runner.pm b/Bugzilla/JobQueue/Runner.pm new file mode 100644 index 000000000..35cfec5dd --- /dev/null +++ b/Bugzilla/JobQueue/Runner.pm @@ -0,0 +1,97 @@ +# -*- Mode: perl; indent-tabs-mode: nil -*- +# +# The contents of this file are subject to the Mozilla Public +# License Version 1.1 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS +# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or +# implied. See the License for the specific language governing +# rights and limitations under the License. +# +# The Original Code is the Bugzilla Bug Tracking System. +# +# The Initial Developer of the Original Code is Mozilla Corporation. +# Portions created by the Initial Developer are Copyright (C) 2008 +# Mozilla Corporation. All Rights Reserved. +# +# Contributor(s): +# Mark Smith +# Max Kanat-Alexander + +# XXX In order to support Windows, we have to make gd_redirect_output +# use Log4Perl or something instead of calling "logger". We probably +# also need to use Win32::Daemon or something like that to daemonize. + +package Bugzilla::JobQueue::Runner; + +use strict; +use File::Basename; +use Pod::Usage; + +use Bugzilla::Constants; +use Bugzilla::JobQueue; +use Bugzilla::Util qw(get_text); +BEGIN { eval "use base qw(Daemon::Generic)"; } + +# Required because of a bug in Daemon::Generic where it won't use the +# "version" key from DAEMON_CONFIG. +our $VERSION = BUGZILLA_VERSION; + +use constant DAEMON_CONFIG => ( + progname => basename($0), + pidfile => bz_locations()->{datadir} . '/' . basename($0) . '.pid', + version => BUGZILLA_VERSION, +); + +sub gd_preconfig { + return DAEMON_CONFIG; +} + +sub gd_usage { + pod2usage({ -verbose => 0, -exitval => 'NOEXIT' }); + return 0 +} + +sub gd_check { + my $self = shift; + + # Get a count of all the jobs currently in the queue. + my $jq = Bugzilla->job_queue(); + my @dbs = $jq->bz_databases(); + my $count = 0; + foreach my $driver (@dbs) { + $count += $driver->select_one('SELECT COUNT(*) FROM ts_job', []); + } + print get_text('job_queue_depth', { count => $count }) . "\n"; +} + +sub gd_run { + my $self = shift; + + my $jq = Bugzilla->job_queue(); + $jq->set_verbose($self->{debug}); + foreach my $module (values %{ Bugzilla::JobQueue::JOB_MAP() }) { + eval "use $module"; + $jq->can_do($module); + } + $jq->work; +} + +1; + +__END__ + +=head1 NAME + +Bugzilla::JobQueue::Runner - A class representing the daemon that runs the +job queue. + + use Bugzilla::JobQueue::Runner; + Bugzilla::JobQueue::Runner->new(); + +=head1 DESCRIPTION + +This is a subclass of L that is used by L +to run the Bugzilla job queue. -- cgit v1.2.3-24-g4f1b