class MicroscopeTracer::RackMiddleware

Public Class Methods

new(app,service_name) click to toggle source
# File lib/microscope_tracer/rack_middleware.rb, line 10
def initialize(app,service_name)
  @app = app
  @trace_logger = TraceLogger.new(service_name)
end

Public Instance Methods

call(env) click to toggle source
# File lib/microscope_tracer/rack_middleware.rb, line 15
def call(env)
  span = (env["SPAN"] ||= Headers.span_from_server_request_headers(env))
  span.store_for_this_request

  started_at = Time.now

  @trace_logger.log_server_start(span)

  status, header, body = @app.call(env)

  body = Rack::BodyProxy.new(body) do
    duration = Time.now - started_at
    @trace_logger.log_server_end(span,duration) 
  end

  [status, header, body]
ensure
  RequestStore.clear! # make certain that any span info is cleared out before the next request comes in
end