Developer Guide

Any language that can consume, parse and produce JSON-messages over a network has the potential to be used to build a component that can be used with other Grassroots components.

For the current system, the code is written mostly in C with parts in C++, Java and Javascript. The server functionality is provided by using the supplied Apache httpd module, mod_grassroots although this could be replaced by another language and server of your choosing by writing the required code.

A Client is used to connect to a Grassroots Server and interact with the available Services. This can be via a web browser, a desktop client or mobile application.

Each of the existing libraries falls into either being server-specific, client-specific or usable by either.

Server-specific libraries

For more information, see the Server documentation.

DRMAA

DRMAA is an API to allow access to computing grids, clusters and cloud-based services. The Grassroots DRMAA library wraps up calls to specify things such as queues to submit jobs to, number of nodes to use, job monitoring, etc. It can be used with both LSF and SLURM schedulers.

iRODS

iRODS is a data storage layer that abstracts out where the data is stored as well as having the ability to add metadata to files and directories to allow for searching. The Grassroots iRODS library adds an API to simplify searching on various criteria.

MongoDB

MongoDB is an open-source, document database designed for ease of development and scaling. Grassroots has a MongoDB library for commonly used tasks as well.

Server library

The Server library takes care of consuming and JSON messages and processing these messages and making the appropriate in internal API calls along with any communication with other remote servers before returning the outgoing JSON message back to the initial message's sender.

Services library

Services

Grassroots Services are the components that are accessed by the user to perform various tasks. Since the scientific functionality is delivered by each of the Services, most development will revolve around writing new Services.

Client-specific libraries

Other libraries

Network

Handler

Handlers are the family of components that allow data to be read or written to different storage systems such as local filesystems, iRODS, http(s), etc. By abstracting these different systems out, other parts of the Grassroots architecture can read and write data transparently without having to be concerned about the underlying storage mechanism. Handlers are explained in detail in the Handlers guide.

Utility

Parameters Library

The Parameters library stores all of the functionality that is needed to define, change, and manipulate Service configuration options by a Client.