Skip to content

Write a Rodan job package

Ling-Xiao Yang edited this page Feb 10, 2015 · 24 revisions

The job packages reside in the folder /rodan/jobs/. A job vendor provides its directory under this folder, where multiple Rodan jobs are defined. A job vendor can define the resource types that are required for its jobs as well.

1. Describe a Rodan Job

A Rodan job is defined by a class that inherits rodan.jobs.base.RodanTask. The class should define the following attributes as its description:

attribute description
name string a unique name within all the jobs provided by the vendor.
author string the author of the job.
description string
settings [JSON Schema](http://json-schema.org/)1 the validation schema that describes the requirements of the job settings.
enabled boolean
category string
interactive boolean indicates whether the job will pause at some point and wait for manual input.2
input_port_types list of Python dictionary
output_port_types list of Python dictionary

1 - At present, Rodan only supports a JSON object as the topmost structure of settings.

2 - It is only informative for the users. It does not affect whether the job will pause. The behaviour of the job is determined by the return value of its execution code.

For input_port_types and output_port_types, the following keys should be defined:

key description
name string
resource_types list of string OR lambda: string -> boolean describes all possible resource MIME-types. If provided with a lambda function, Rodan will automatically filter the matched resource types in its registry.
minimum number minimum requirement of the job. 0 indicates no minimum requirement.
maximum number maximum requirement of the job. 0 indicates no maximum requirement.

2. Implement the Job

The execution of a job can have two possible phases: automatic phase and manual phase. In automatic phase, the job is sent to background workers that are distributed on the network; in manual phase, the job communicates with human through a web interface via HTTP protocol.

A job always starts and ends with an automatic phase.

3. Test the Job

4. Describe Resource Types

The resource MIME-types should be defined for Rodan to recognize them. A vendor can describe the required resource MIME-types through a file resource_types.yaml in the vendor directory. It is a list of mappings, which include:

name description
mimetype string
description (optional) string
extension (optional) string the suggested extension of this resource type.

5. Import the Job

Rodan imports the vendor module. Therefore, it is the vendor's responsibility to import the jobs in outermost __init__.py. It is not necessary to import every class, though -- import the Python file that contains the job classes, and Rodan will find the job classes and register them.

It is safer to use rodan.jobs.module_loader function to import the job modules. module_loader will catch the ImportError and write it into the log file instead of throwing an exception that terminates Rodan.

Clone this wiki locally