NAME

Minion::Job - Minion job

SYNOPSIS

use Minion::Job;

my $job = Minion::Job->new(id => $id, minion => $minion, task => 'foo');

DESCRIPTION

Minion::Job is a container for Minion jobs.

EVENTS

Minion::Job inherits all events from Mojo::EventEmitter and can emit the following new ones.

failed

$job->on(failed => sub {
  my ($job, $err) = @_;
  ...
});

Emitted in the worker process managing this job or the process performing it, after it has transitioned to the failed state.

$job->on(failed => sub {
  my ($job, $err) = @_;
  say "Something went wrong: $err";
});

finished

$job->on(finished => sub {
  my ($job, $result) = @_;
  ...
});

Emitted in the worker process managing this job or the process performing it, after it has transitioned to the finished state.

$job->on(finished => sub {
  my ($job, $result) = @_;
  my $id = $job->id;
  say "Job $id is finished.";
});

spawn

$job->on(spawn => sub {
  my ($job, $pid) = @_;
  ...
});

Emitted in the worker process managing this job, after a new process has been spawned for processing.

$job->on(spawn => sub {
  my ($job, $pid) = @_;
  my $id = $job->id;
  say "Job $id running in process $pid";
});

ATTRIBUTES

Minion::Job implements the following attributes.

args

my $args = $job->args;
$job     = $job->args([]);

Arguments passed to task.

id

my $id = $job->id;
$job   = $job->id($id);

Job id.

minion

my $minion = $job->minion;
$job       = $job->minion(Minion->new);

Minion object this job belongs to.

task

my $task = $job->task;
$job     = $job->task('foo');

Task name.

METHODS

Minion::Job inherits all methods from Mojo::EventEmitter and implements the following new ones.

app

my $app = $job->app;

Get application from "app" in Minion.

# Longer version
my $app = $job->minion->app;

fail

my $bool = $job->fail;
my $bool = $job->fail('Something went wrong!');
my $bool = $job->fail({msg => 'Something went wrong!'});

Transition from active to failed state.

finish

my $bool = $job->finish;
my $bool = $job->finish('All went well!');
my $bool = $job->finish({msg => 'All went well!'});

Transition from active to finished state.

info

my $info = $job->info;

Get job information.

# Check job state
my $state = $job->info->{state};

# Get job result
my $result = $job->info->{result};

is_finished

my $bool = $job->is_finished($pid);

Check if job performed with "start" is finished.

perform

$job->perform;

Perform job in new process and wait for it to finish.

remove

my $bool = $job->remove;

Remove failed, finished or inactive job from queue.

retry

my $bool = $job->retry;
my $bool = $job->retry({delay => 10});

Transition from failed or finished state back to inactive.

These options are currently available:

delay
delay => 10

Delay job for this many seconds (from now).

start

my $pid = $job->start;

Perform job in new process, but do not wait for it to finish.

# Perform two jobs concurrently
my $pid1 = $job1->start;
my $pid2 = $job2->start;
my ($first, $second);
sleep 1
  until $first  ||= $job1->is_finished($pid1)
  and   $second ||= $job2->is_finished($pid2);

SEE ALSO

Minion, Mojolicious::Guides, http://mojolicio.us.