JobCenter::Client::Mojo - JobCenter JSON-RPC 2.0 Api client using Mojo.
use JobCenter::Client::Mojo; my $client = JobCenter::Client::Mojo->new( address => ... port => ... who => ... token => ... ); my ($job_id, $outargs) = $client->call( wfname => 'test', inargs => { test => 'test' }, );
JobCenter::Client::Mojo is a class to build a client to connect to the JSON-RPC 2.0 Api of the JobCenter workflow engine. The client can be used to create and inspect jobs as well as for providing 'worker' services to the JobCenter.
$client = JobCenter::Client::Mojo->new(%arguments);
Class method that returns a new JobCenter::Client::Mojo object.
Valid arguments are:
(default: 127.0.0.1)
(default 6522)
(default false)
(default undef)
(required)
(default: password)
(default: false)
(per default the Mojo::IOLoop->singleton object is used)
when true expects the inargs to be valid json, when false a perl hashref is expected and json encoded. (default true)
(per default a new JSON::MaybeXS object is created)
(per default a new Mojo::Log object is created)
(default 60 seconds)
(default 5 minutes)
($job_id, $result) = $client->call(%args);
Creates a new JobCenter job and waits for the results. Throws an error if somethings goes wrong immediately. Errors encountered during later processing are returned as a JobCenter error object.
$job_id = $client->call_nb(%args);
Creates a new JobCenter job and call the provided callback on completion of the job. Throws an error if somethings goes wrong immediately. Errors encountered during later processing are returned as a JobCenter error object to the callback.
Valid arguments are those for call and:
( cb1 => sub { ($job_id, $err) = @_; ... } )
If job_id is undefined the job was not created, the error is then returned as the second return value.
( cb2 => sub { ($job_id, $outargs) = @_; ... } )
($job_id, $result) = $client->get_job_status($job_id);
Retrieves the status for the given $job_id. If the job_id does not exist then the returned $job_id will be undefined and $result will be an error message. If the job has not finished executing then both $job_id and $result will be undefined. Otherwise the $result will contain the result of the job. (Which may be a JobCenter error object)
$client->get_job_status_nb(%args);
Retrieves the status for the given $job_id.
( statuscb => sub { ($job_id, $result) = @_; ... } )
If the job_id does not exist then the returned $job_id will be undefined and $result will be an error message. If the job has not finished executing then both $job_id and $result will be undefined. Otherwise the $result will contain the result of the job. (Which may be a JobCenter error object)
If the job was still running when the get_job_status_nb call was made then this callback will be called on completion of the job.
($err, @jobs) = $client->find_jobs({'foo'=>'bar'});
Finds all currently running jobs with arguments matching the filter expression. The expression is evaluated in PostgreSQL using the @> for jsonb objects, basically this means that you can only do equality tests for one or more top-level keys. If @jobs is empty $err might contain an error message.
$status = $client->ping($timeout);
Tries to ping the JobCenter API. On success return true. On failure returns the undefined value, after that the client object should be undefined.
$client->close()
Closes the connection to the JobCenter API and tries to de-allocate everything. Trying to use the client afterwards will produce errors.
$client->create_slotgroup($name, $slots)
A 'slotgroup' is a way of telling the JobCenter API how many taskss the worker can do at once. The number of slots should be a positive integer. Slotgroups names starting with a _ (underscore) are reserved for internal use. Returns a error message when then was an error, the empty string otherwise.
Announces the capability to do an action to the Api. The provided callback will be called when there is a task to be performed. Returns an error when there was a problem announcing the action.
my $err = $client->announce( workername => 'me', actionname => 'do', slots => 1 cb => sub { ... }, ); die "could not announce $actionname?: $err" if $err;
See jcworker for an example.
(optional, defaults to client->who, processname and processid)
(optional, default 'sync')
Possible values:
(optional, default false)
(optional, conflicts with 'slots')
(optional, default 1, conflicts with 'slotgroup')
Called with the same arguments as the original callback.
(optional, only valid for mode 'subproc')
The filter expression allows a worker to specify that it can only do the actionname for a certain subset of arguments. For example, for a "mkdir" action the filter expression {'host' => 'example.com'} would mean that this worker can only do mkdir on host example.com. Filter expressions are limited to simple equality tests on one or more keys, and only those keys that are allowed in the action definition. Filtering can be allowed, be mandatory or be forbidden per action.
If the addenv flag is true the action callback will be given one extra argument containing the action environment as a hashref. In the async callback mode the environment will be inserted before the result callback.
Starts the Mojo::IOLoop. Returns a non-zero value when the IOLoop was stopped due to some error condition (like a lost connection or a ping timeout).
The JobCenter::Client::Mojo library currently defines the following exit codes:
WORK_OK WORK_PING_TIMEOUT WORK_CONNECTION_CLOSED
$client->stop($exit);
Makes the work() function exit with the provided exit code.
Mojo::IOLoop, Mojo::IOLoop::Stream, http://mojolicious.org: the Mojolicious Web framework
jcclient, jcworker
https://github.com/a6502/JobCenter: JobCenter Orchestration Engine
This software has been developed with support from STRATO. In German: Diese Software wurde mit Unterstützung von STRATO entwickelt.
Thanks to Eitan Schuler for reporting a bug and providing a pull request.
Wieger Opmeer <wiegerop@cpan.org>
This software is copyright (c) 2017 by Wieger Opmeer.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
To install JobCenter::Client::Mojo, copy and paste the appropriate command in to your terminal.
cpanm
cpanm JobCenter::Client::Mojo
CPAN shell
perl -MCPAN -e shell install JobCenter::Client::Mojo
For more information on module installation, please visit the detailed CPAN module installation guide.