Raindrops Aggregate Aggregate::LastDataRecv Aggregate::PMQ LastDataRecv Linux ListenStats Middleware Middleware::Proxy Struct Watcher



class Raindrops::Middleware

Raindrops::Middleware is Rack middleware that allows snapshotting current activity from an HTTP request. For all operating systems, it returns at least the following fields:

Additional fields are available for Linux users.

It should be loaded at the top of Rack middleware stack before other middlewares for maximum accuracy.

Usage (Rainbows!/Unicorn preload_app=false)

If you're using preload_app=false (the default) in your Rainbows!/Unicorn config file, you'll need to create the global Stats object before forking.

require 'raindrops'
$stats ||=

In your Rack

use Raindrops::Middleware, :stats => $stats

Usage (Rainbows!/Unicorn preload_app=true)

If you're using preload_app=true in your Rainbows!/Unicorn config file, just add the middleware to your stack:

In your Rack

use Raindrops::Middleware

Linux-only extras!

To get bound listener statistics under Linux, you need to specify the listener names for your server. You can even include listen sockets for other servers on the same machine. This can be handy for monitoring your nginx proxy as well.

In your Rack, just pass the :listeners argument as an array of strings (along with any other arguments). You can specify any combination of TCP or Unix domain socket names:

use Raindrops::Middleware, :listeners => %w( /tmp/.sock)

If you're running Unicorn 0.98.0 or later, you don't have to pass in the :listeners array, Raindrops will automatically detect the listeners used by Unicorn master process. This does not detect listeners in different processes, of course.

The response body includes the following stats for each listener (see also Raindrops::ListenStats):

Demo Server

There is a server running this middleware (and Watcher) at

Also check out the Watcher demo at

The demo server is only limited to 30 users, so be sure not to abuse it by using the /tail/ endpoint too much.



A Raindrops::Struct used to count the number of :calling and :writing clients. This struct is intended to be shared across multiple processes and both counters are updated atomically.

This is supported on all operating systems supported by Raindrops

Public Class Methods

new (app, opts = {}) source

app may be any Rack application, this middleware wraps it. opts is a hash that understands the following members:

Pages Classes Methods
mail archives:
public: / private:
source code: git clone git://
	git clone