X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=C4%2FScheduler.pm;h=fe7e2ce7702d197fe426a80f956b3eb8bc4fd408;hb=4be177c1aebe852a77efff451875c083092312c8;hp=961df0eb27366b493c36e12b24d90da8fefa2789;hpb=51ad3c371abeedc6c3219957e7547dc6d5c67512;p=koha_fer diff --git a/C4/Scheduler.pm b/C4/Scheduler.pm index 961df0eb27..fe7e2ce770 100644 --- a/C4/Scheduler.pm +++ b/C4/Scheduler.pm @@ -13,23 +13,25 @@ package C4::Scheduler; # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR # A PARTICULAR PURPOSE. See the GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along with -# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, -# Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU General Public License along +# with Koha; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. use strict; -require Exporter; +#use warnings; FIXME - Bug 2505 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); use C4::Context; -use Smart::Comments; use Schedule::At; -# set the version for version checking -$VERSION = 0.01; -@ISA = qw(Exporter); -@EXPORT = - qw(get_jobs get_job add_job remove_job); +BEGIN { + # set the version for version checking + $VERSION = 3.07.00.049; + require Exporter; + @ISA = qw(Exporter); + @EXPORT = + qw(get_jobs get_at_jobs get_at_job add_at_job remove_at_job); +} =head1 NAME @@ -41,55 +43,117 @@ C4::Scheduler - Module for running jobs with the unix at command =head1 DESCRIPTION +=cut =head1 METHODS -=over 2 +=head2 get_jobs(); + +This will return all scheduled jobs =cut -=item get_jobs(); +sub get_jobs { + my $jobs = get_at_jobs(); +# add call to get cron jobs here too + return ($jobs); +} + +=head2 get_at_jobs(); -This will return all scheduled jobs +This will return all At scheduled jobs =cut -sub get_jobs { +sub get_at_jobs { my %jobs = Schedule::At::getJobs(); return (\%jobs); } -=item get_job($id) +=head2 get_at_job($id) -This will return the job with the given id +This will return the At job with the given id =cut -sub get_job { +sub get_at_job { my ($id)=@_; - my %jobs = chedule::At::getJobs(JOBID => $id); + my %jobs = Schedule::At::getJobs(JOBID => $id); } -=item add_job ($time,$command) +=head2 add_at_job ($time,$command) -Given a timestamp and a command this will schedule the job to run at that time +Given a timestamp and a command this will schedule the job to run at that time. + +Returns true if the job is added to the queue and false otherwise. =cut -sub add_job { +sub add_at_job { my ($time,$command) = @_; + # FIXME - a description of the task to be run + # may be a better tag, since the tag is displayed + # in the job list that the administrator sees - e.g., + # "run report foo, send to foo@bar.com" Schedule::At::add(TIME => $time, COMMAND => $command, TAG => $command); + + # FIXME - this method of checking whether the job was added + # to the queue is less than perfect: + # + # 1. Since the command is the tag, it is possible that there is + # already a job in the queue with the same tag. However, since + # the tag is what displays in the job list, we can't just + # give it a unique ID. + # 2. Schedule::At::add() is supposed to return a non-zero + # value if it fails to add a job - however, it does + # not check all error conditions - in particular, it does + # not check the return value of the "at" run; it basically + # complains only if it can't find at. + # 3. Similary, Schedule::At::add() does not do something more useful, + # such as returning the job ID. To be fair, it is possible + # that 'at' does not allow this in any portable way. + # 4. Although unlikely, it is possible that a job could be added + # and completed instantly, thus dropping off the queue. + my $job_found = 0; + eval { + my %jobs = Schedule::At::getJobs(TAG => $command); + $job_found = scalar(keys %jobs) > 0; + }; + if ($@) { + return 0; + } else { + return $job_found; + } } -sub remove_job { +sub remove_at_job { my ($jobid)=@_; Schedule::At::remove(JOBID => $jobid); } +1; +__END__ + +=head1 BUGS + +At some point C should be refactored: + +=over + +=item At and C does not work on Win32. + +=item At is not installed by default on all platforms. + +=item The At queue used by Koha is owned by the httpd user. If multiple +Koha databases share an Apache instance on a server, everybody can +see everybody's jobs. + +=item There is no support for scheduling a job to run more than once. + +=back + =head1 AUTHOR Chris Cormack =cut - -1;