NAME

Bio::CIPRES::Job - a CIPRES job class

SYNOPSIS

use Bio::CIPRES;

my $ua  = Bio::CIPRES->new( %args );
my $job = $ua->submit_job( %params );

$job->wait(6000) or die "Timeout waiting for job completion";

warn "Job returned non-zero status" if ($job->exit_code);

print STDOUT $job->stdout;
print STDERR $job->stderr;

$job->delete;

DESCRIPTION

Bio::CIPRES::Job is a class representing a single CIPRES job. Its purpose is to simplify handling of job status and job outputs.

Users should not create Bio::CIPRES::Job objects directly - they are returned by methods in the Bio::CIPRES class.

METHODS

stage
if ($job->stage eq 'QUEUE') {}

Returns a string describing the current stage of the job.

refresh
$job->refresh;

Makes a call to the API to retrieve the current status of the job, and updates the object attributes accordingly. Generally this is called as part of a while loop while waiting for a job to complete.

is_finished
if ($job->is_finished) {}

Returns true if the job has completed, false otherwise.

is_failed
die "CIPRES error" if ($job->is_failed);

Returns true if the submission has failed, false otherwise. Note that, according to the API docs, this value can be false even if the job itself has failed for some reason. Use Bio::CIPRES::Job::exit_code for a more reliable way to check for job success.

poll_interval
my $s = $job->poll_interval;

Returns the minimum number of seconds that the client should wait between status updates. Generally this is called as part of a while loop.

wait
$job->wait($timeout) or die "Timeout waiting for job to finish";

Enters a blocking loop waiting for the job to finish. Takes a single optional argument of the maximum number of seconds to wait before timing out (default: no timeout). Returns true if the job finishes or false if the wait times out.

outputs
my @results = $job->outputs(
    name  => 'foo.txt',
    group => 'bar',
    force_download => 0,
);

Returns an array of Bio::CIPRES::Output objects representing files generated by the job. Generally this should only be called after a job has completed. By default returns all available outputs. Possible arguments include:

  • group

    Limit returned outputs to those in the specified group

  • name

    Limit returned output to that with the specified name

  • force_download

    Force the client to re-download output list (as opposed to using cached values). This is automatically called from within Bio::CIPRES::Job::refresh and generally doesn't need to be set by the user. (default: false)

exit_code
warn "Job returned non-zero status" if ($job->exit_code != 0);

Returns the actual exit code of the job on the remote server. Exit codes < 0 indicate API or server errors, while exit codes > 0 indicate errors in the job tool itself (possibly described in the tool's documentation).

timed_out
warn "Job timed out on remote scheduler" if ($job->timed_out);

Returns true if the job timed out according to the remote scheduler, false if it did not, and undefined if unable to be determined. Note that the method for detecting such state relies on parsing STDERR text and may be subject to false negatives. A true return value is thus relatively reliable, while a false value should not be strictly relied upon for any critical purposes.

stdout
print STDOUT $job->stdout;

Returns the STDOUT from the job as a string.

stderr
print STDERR $job->stderr;

Returns the STDERR from the job as a string.

submit_time

Returns the original submission date/time as a Time::Piece object

messages

Returns a reference to an array of Bio::CIPRES::Message objects associated with the job

delete
$job->delete;

Deletes a job from the user workspace, including all of the output files. Generally this should be called once a job is completed and all desired output files have been fetched. This will help to keep the user workspace clean.

CAVEATS AND BUGS

Please reports bugs to the author.

AUTHOR

Jeremy Volkening <jdv@base2bio.com>

COPYRIGHT AND LICENSE

Copyright 2016 Jeremy Volkening

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY 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 this program. If not, see <http://www.gnu.org/licenses/>.