Class: Raindrops::LastDataRecv

### Home Classes Methods

### In Files

- lib/raindrops/last_data_recv.rb

### Parent

Object

### Files

- LICENSE
- NEWS
- README

### Class/Module Index

Quicksearch

- Raindrops
- Raindrops::Aggregate
- Raindrops::Aggregate::LastDataRecv
- Raindrops::Aggregate::PMQ
- Raindrops::InetDiagSocket
- Raindrops::LastDataRecv
- Raindrops::Linux
- Raindrops::ListenStats
- Raindrops::Middleware
- Raindrops::Middleware::Proxy
- Raindrops::Middleware::Stats
- Raindrops::Struct
- Raindrops::TCP_Info
- Raindrops::Watcher

No matching classes.

# Raindrops::LastDataRecv

This is highly experimental!

A self-contained Rack application for aggregating in the `tcpi_last_data_recv` field in `struct` `tcp_info` defined in `/usr/include/linux/tcp.h`. This is only useful for Linux 2.6 and later. This primarily supports Unicorn and derived servers, but may also be used with any Ruby web server using the core TCPServer class in Ruby.

Hitting the Rack endpoint configured for this application will return a an ASCII histogram response body with the following headers:

- X-Count - number of requests received

The following headers are only present if X-Count is greater than one.

- X-Min - lowest last_data_recv time recorded (in milliseconds)

- X-Max - highest last_data_recv time recorded (in milliseconds)

- X-Mean - mean last_data_recv time recorded (rounded, in milliseconds)

- X-Std-Dev - standard deviation of last_data_recv times

- X-Outliers-Low - number of low outliers (hopefully many!)

- X-Outliers-High - number of high outliers (hopefully zero!)

## To use with Unicorn and derived servers (preload_app=false):

Put the following in our Unicorn config file (not config.ru):

    require "raindrops/last_data_recv"

Then follow the instructions below for config.ru:

## To use with any Rack server using TCPServer

Setup a route for Raindrops::LastDataRecv in your Rackup config file (typically config.ru):

    require "raindrops"
    map "/raindrops/last_data_recv" do
      run Raindrops::LastDataRecv.new
    end
    map "/" do
      use SomeMiddleware
      use MoreMiddleware
      # ...
      run YourAppHere.new
    end

## To use with any other Ruby web server that uses TCPServer

Put the following in any piece of Ruby code loaded after the server has bound its TCP listeners:

    ObjectSpace.each_object(TCPServer) do |s|
      s.extend Raindrops::Aggregate::LastDataRecv
    end

    Thread.new do
      Raindrops::Aggregate::LastDataRecv.default_aggregate.master_loop
    end

Then follow the above instructions for config.ru

[Validate]

Generated with the Darkfish Rdoc Generator 2.