Leafy-Rack¶ ↑
installation¶ ↑
via rubygems
gem install leafy-rack
or add to your Gemfile
gem 'leafy-rack
installing the gem also takes care of the jar dependencies with jruby-1.7.16+
intro¶ ↑
there actually three parts to this gem
-
serializers to write out json data from the collected data of
Leafy::Health::Registry
andLeafy::Metrics::Registry
-
instrumented class which is almost like a rack middleware but is threadsafe and is meant to be shared with ALL requests. with this sharing in can count the number of active requests.
-
a collection of middleware
serializers for health and metrics data¶ ↑
are using the internal API of Leafy::Health::Registry
or Leafy::Metrics::Registry
to run_health_checks
or retrieve the collect metrics and produces the json representation of these data.
registry = Leafy::Health::Registry.new json_writer = Leafy::Json::HealthWriter.new json_writer.to_json( registry.health.run_health_checks )
or
registry = Leafy::Metrics::Registry.new json_writer = Leafy::Json::MetricsWriter.new json_writer.to_json( registry.metrics )
both json writers can take a second argument to generate pretty prints:
json_writer.to_json( registry.health.run_health_checks, true ) json_writer.to_json( registry.metrics, true )
instrumented http response¶ ↑
the class Leafy::Instrumented::Instrumented
has a call method which expect a block. the block needs to return the usual rack middleware result [status, headers, body]
.
typical usage of this inside a rack-middleware
metrics = Leafy::Metrics::Registry.new instrumented = Leafy::Instrumented::Instrumented.new( metrics, 'myapp' ) instrumented.call do @app.call( env ) end
see the Leafy::Rack::Instrumented
for an example.
rack middleware¶ ↑
-
instrumented middleware collecting metrics on response status, response time, and active requests
-
json data of metrics snapshot
-
json data of current health
-
ping
-
java thread-dump
-
admin page with links to metrics, health, ping and thread-dump data
instrumented middleware¶ ↑
metrics = Leafy::Metrics::Registry.new use Leafy::Rack::Instrumented, Leafy::Instrumented::Instrumented.new( metrics, 'webapp' )
note: when this instrumented middleware gets configured after any of the admin middleware (see below) then those admin requests are not going into the instrumented metrics.
metrics middleware¶ ↑
json data of a snapshot of metrics are under the path /metrics
metrics = Leafy::Metrics::Registry.new use Leafy::Rack::Metrics, metrics
or with custom path
metrics = Leafy::Metrics::Registry.new use Leafy::Rack::Metrics, metrics, '/admin/metrics'
health-checks middleware¶ ↑
json data of current health are under the path /health
health = Leafy::Health::Registry.new use Leafy::Rack::Health, health
or with custom path
health = Leafy::Health::Registry.new use Leafy::Rack::Health, health, '/admin/health'
ping middleware¶ ↑
under the path /ping
use Leafy::Rack::Ping
or with custom path
use Leafy::Rack::Ping, '/admin/ping'
java thread-dump middleware¶ ↑
under the path /threads
use Leafy::Rack::ThreadDump
or with custom path
use Leafy::Rack::ThreadDump, '/admin/threads'
admin page middleware¶ ↑
a simple page with links to metrics, health, ping and thread-dump data under the path /admin
metrics = Leafy::Metrics::Registry.new health = Leafy::Health::Registry.new use Leafy::Rack::Admin, metrics, health
or with custom path
metrics = Leafy::Metrics::Registry.new health = Leafy::Health::Registry.new use Leafy::Rack::Admin, metrics, health, '/hidden/admin'
example sinatra app¶ ↑
there is an example sinatra application which uses admin and instrumented middleware and adds some extra metrics inside the application.
developement¶ ↑
get all the gems and jars in place
gem install jar-dependencies --development bundle install
please make sure you are using jar-dependencies > 0.1.8 !
for running all specs
rake
or
rspec spec/reporter_spec.rb