def call(env)
first_middleware = note_transaction_started(env)
state = NewRelic::Agent::TransactionState.tl_get
begin
Transaction.start(state, category, build_transaction_options(env, first_middleware))
events.notify(:before_call, env) if first_middleware
result = (target == self) ? traced_call(env) : target.call(env)
if first_middleware
capture_response_attributes(state, result)
events.notify(:after_call, env, result)
end
result
rescue Exception => e
NewRelic::Agent.notice_error(e)
raise e
ensure
Transaction.stop(state)
end
end