This is highly experimental!
A self-contained Rack application for aggregating in the
tcpi_last_data_recv field in
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!)
Put the following in our Unicorn config file (not config.ru):
Then follow the instructions below for config.ru:
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
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
mail archives: https://yhbt.net/raindrops-public/ http://ou63pmih66umazou.onion/raindrops-public nntp://news.public-inbox.org/inbox.comp.lang.ruby.raindrops nntp://ou63pmih66umazou.onion/inbox.comp.lang.ruby.raindrops public: firstname.lastname@example.org source code: git clone https://yhbt.net/raindrops.git torsocks git clone http://ou63pmih66umazou.onion/raindrops.git