Class: DebugBundle::Rack::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/debugbundle/rack/middleware.rb

Instance Method Summary collapse

Constructor Details

#initialize(app, client: DebugBundle.client) ⇒ Middleware

Returns a new instance of Middleware.



8
9
10
11
# File 'lib/debugbundle/rack/middleware.rb', line 8

def initialize(app, client: DebugBundle.client)
  @app = app
  @client = client
end

Instance Method Details

#call(env) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/debugbundle/rack/middleware.rb', line 13

def call(env)
  request_context = build_request_context(env)
  started_at = Process.clock_gettime(Process::CLOCK_MONOTONIC)
  @client.with_request_trigger(request_context.fetch(:request)) do
    status, headers, body = @app.call(env)
    duration_ms = elapsed_ms(started_at)

    @client.capture_request(
      request_context.fetch(:request),
      { status_code: status, headers: headers.to_h },
      context: request_context.merge(duration_ms: duration_ms, route_template: route_template(env))
    )

    [status, headers, body]
  end
rescue StandardError => e
  duration_ms = elapsed_ms(started_at)
  @client.capture_exception(
    e,
    context: request_context.merge(
      response: { status_code: 500, headers: {} },
      duration_ms: duration_ms,
      route_template: route_template(env)
    ),
    handled: false
  )
  raise
end