def perform_action_with_newrelic_trace(*args, &block)
state = NewRelic::Agent::TransactionState.tl_get
state.request = newrelic_request(args)
skip_tracing = do_not_trace? || !state.is_execution_traced?
if skip_tracing
state.current_transaction.ignore! if state.current_transaction
NewRelic::Agent.disable_all_tracing { return yield }
end
trace_options = args.last.is_a?(Hash) ? args.last : NR_DEFAULT_OPTIONS
category = trace_options[:category] || :controller
txn_options = create_transaction_options(trace_options, category, state)
begin
txn = Transaction.start(state, category, txn_options)
begin
yield
rescue => e
NewRelic::Agent.notice_error(e)
raise
end
ensure
if txn
txn.ignore_apdex! if ignore_apdex?
txn.ignore_enduser! if ignore_enduser?
end
Transaction.stop(state)
end
end