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
|