Home - RapturePlatform/Rapture GitHub Wiki
Rapture
The information in this wiki is divided into two separate parts. If you're a developer and you want to build applications on the platform there are sections that describe what Rapture is from that perspective and how you can write applications on it. If you also would like to contribute to the development of the core Rapture there are some more detailed articles on the structure of the code base and some ways that you can contribute.
What is Rapture?
Rapture is a platform that can reduce the time needed to build applications or solutions that involve the acquisition, manipulation and display of information. The platform is agnostic to underlying technologies used to do the actual storage - there are plugins for common storage databases such as MongoDB, Cassandra and Postgres. Implementations of those plugins follow a standard interface and it is straightforward to create new plugins.
Interacting and using Rapture takes place through a broad and comprehensive API. The API is how you interact with the kernel of Rapture whether your code is running directly on the platform (perhaps a script running as part of a workflow) or as a client side process simply using Rapture from a distance. Implementations of the client side API have been created for Java, Javascript (usually using Node.js), Python, Ruby and .NET. Other language implementations are easy to add, either semi-automatically through the use of the Rapture API generator, or through simply hand crafting the protocol for the API which takes place over HTTP.
Rapture introduces the following fundamental concepts that bind the platform together:
Repository
A repository is a store of information, backed by an underlying 3rd party implementation (e.g. MongoDB). Repositories can be used to store documents (usually json formatted text keyed to a unique URL), blobs (large binary data values) and series (usually a time based series of data points). Some repositories can be versioned - new updates create new versions but the history is preserved. All repositories hold metadata about the content which can be used to understand at a later date what happened and when.
All data in repositories is referenced through unique URLs which can be passed around between applications.
Workflow
A workflow in Rapture is the definition of a sequence of steps that perform some activity. The steps can branch and rejoin - it is not necessarily a linear sequence of actions. Each step in a workflow can involve the running of a script or the execution of custom Java code. Custom java code needs to be from a class that implements a specific interface defined in the codebase. The "return value" of a step is used to determine which of the possible next steps should be executed as part of this instance of a workflow, and this continues until a terminating step is reached. As workflows can be nested, the return value of running a workflow is passed back to its calling workflow.
Workflows are run by invoking an API call (or running an application that will ultimately call that API). A workflow instance is known in Rapture as a "Work Order" and the work order can be initialized with some initial parameters that each step has access to. During execution a step can both read and write to this parameter set, known as the "view" of the work order.
Workflows can also be attached to a schedule and a specific Rapture application (the ScheduleManager) can be used to check and invoke the workflows according to that schedule. API calls are provided for UI applications to manipulate this schedule.
The output of running a workflow (stdout for example) can be captured and stored in a blob document in Rapture for viewing from an operational perspective.