Method: OneApm::Rack::MiddlewareTracing#call

Defined in:
lib/one_apm/rack/middleware_tracing.rb

#call(env) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/one_apm/rack/middleware_tracing.rb', line 56

def call(env)
  first_middleware = note_transaction_started(env)

  state = OneApm::TransactionState.tl_get
  begin
    options = build_transaction_options(env, first_middleware)

    current_transaction = OneApm::Transaction.start(state, category, options)

    current_transaction.ignore_frames << options[:transaction_name] if respond_to?(:middleware_ignore?) && middleware_ignore?

    events.notify(:before_call, env) if first_middleware
    result = (target == self) ? traced_call(env) : target.call(env)

    capture_http_response_code(state, result)
    events.notify(:after_call, env, result) if first_middleware

    result
  rescue Exception => e
    OneApm::Manager.notice_error(e)
    raise e
  ensure
    OneApm::Transaction.stop(state)
  end
end