[](
https://travis-ci.org/berkmancenter/p5-MediaCloud-JobManager) [](
https://coveralls.io/github/berkmancenter/p5-MediaCloud-JobManager)
# MediaCloud::JobManager
(Yet another) Perl worker / client library for running jobs asynchronously.
## Features
* Job brokers supported:
* [Gearman](
http://gearman.org/)
* Automattic worker logging via [Log::Log4perl](
http://search.cpan.org/~mschilli/Log-Log4perl/)
* Restarting failed jobs
* Progress reporting
## Sample
### Worker
```perl
package AddTwoNumbers;
use strict;
use warnings;
use Moose;
with 'MediaCloud::JobManager::Job';
sub run($;$)
{
my ( $self, $args ) = @_;
my $number_1 = $args->{ number_1 };
my $number_2 = $args->{ number_2 };
# Write the sum to the database here
say STDERR "Sum: " . ( $number_1 + $number_2 );
return 1;
}
no Moose; # gets rid of scaffolding
# Return package name instead of 1 or otherwise worker.pl won't know the
# name of the package it's loading
__PACKAGE__;
```
### Client
```perl
use AddTwoNumbers;
my $args = { number_1 => 3, number_2 => 4 };
# Run locally, like any other function
AddTwoNumbers->run_locally( $args );
# Run remotely, wait for the function to finish
AddTwoNumbers->run_remotely( $args );
# Add to broker's queue and return instantly, don't wait for the function to finish
AddTwoNumbers->add_to_queue( $args );
```
# Development Notes
## Code formatting
Install `perltidy` Git hook to automatically fix script formatting:
cpanm --installdeps .
githook-perltidy install