Class: MicroscopeTracer::RackMiddleware

Inherits:
Object
  • Object
show all
Defined in:
lib/microscope_tracer/rack_middleware.rb

Instance Method Summary collapse

Constructor Details

#initialize(app, service_name) ⇒ RackMiddleware

Returns a new instance of RackMiddleware.



10
11
12
13
# File 'lib/microscope_tracer/rack_middleware.rb', line 10

def initialize(app,service_name)
  @app = app
  @trace_logger = TraceLogger.new(service_name)
end

Instance Method Details

#call(env) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 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