class Trashed::Rack

Constants

GAUGES

Public Class Methods

new(app, reporter, options = {}) click to toggle source
# File lib/trashed/rack.rb, line 7
def initialize(app, reporter, options = {})
  @reporter = reporter
  @meters = Array(options.fetch(:meters, [ResourceUsage]))
  @app = build_instrumented_app(app, @meters)
end

Public Instance Methods

call(env) click to toggle source
# File lib/trashed/rack.rb, line 13
def call(env)
  env[STATE]   = { :persistent => persistent_thread_state }
  env[TIMINGS] = {}
  env[GAUGES]  = []

  @app.call(env).tap { @reporter.report env }
end

Private Instance Methods

build_instrumented_app(app, meters) click to toggle source
# File lib/trashed/rack.rb, line 26
def build_instrumented_app(app, meters)
  meters.inject app do |wrapped, meter|
    lambda do |env|
      meter.instrument! env[STATE], env[TIMINGS], env[GAUGES] do
        wrapped.call env
      end
    end
  end
end
persistent_thread_state() click to toggle source
# File lib/trashed/rack.rb, line 22
def persistent_thread_state
  Thread.current[:trashed_rack_state] ||= {}
end