Introducing RPM's Remote Procedure Call API

Submitted by Dan Casper on Thu, 03/12/2015 - 12:48

When we sat down to revise RPM for Version 6, two of our main considerations were flexibility and customization. We've long recognized that our customers' use scenarios can vary wildly. If all you need is to save copies of print streams, RPM does that with very little configuration. But what if you need custom handling, conditional processing, event-driven notification, or a combination there-of? Our new User Interface does quite a bit, but there's always an edge case. So rather than just redesign for the use cases we could envision, we built an entire API that provides access to RPM's considerable processing power. But most people have never even heard of it - until now.

Beginning in the earliest beta stages of version 5.2 and fully realized in version 6.0, RPM now includes a Remote Procedure Call (RPC) Interface. This developer-focused interface allows external programs to communicate directly with RPM. Authorized programs have access to a wide range of features and controls, including:

Retrieving Configuration

Modifying Configuration

Submitting, Altering, Releasing, or even Deleting Jobs

Asynchronous Notification of Events

If you're thinking "that sounds pretty useful", you're not alone. Our team has been using this interface to deploy custom solutions for our customers since 6.0 was released. We've taken on small projects like renaming a job to include an invoice number in its title, all the way up to fully externalized processing for custom data formats that include multiple outputs per incoming data stream.

That's great, how do I get my hands on it!?

I'm glad you asked. We've created an example implementation of this API in Python. It lives on GitHub at https://github.com/gddc/rpmcli and includes examples for submitting jobs, suspending queues, and more. The source code is freely available and comes bundled with a distutils setup script to install the RPM CLI directly into your Python Interpreter, as well as a py2exe compilation script to generate executable copies of the utilities. We've even compiled the standalone utilities into executable versions for your convenience - standalones_32bit.zip.