def self.stop(state, end_time=Time.now)
txn = state.current_transaction
if txn.nil?
NewRelic::Agent.logger.error(FAILED_TO_STOP_MESSAGE)
return
end
nested_frame = txn.frame_stack.pop
if txn.frame_stack.empty?
txn.stop(state, end_time, nested_frame)
state.reset
else
nested_name = nested_transaction_name(nested_frame.name)
if nested_name.start_with?(MIDDLEWARE_PREFIX)
summary_metrics = MIDDLEWARE_SUMMARY_METRICS
else
summary_metrics = EMPTY_SUMMARY_METRICS
end
NewRelic::Agent::MethodTracerHelpers.trace_execution_scoped_footer(
state,
nested_frame.start_time.to_f,
nested_name,
summary_metrics,
nested_frame,
NESTED_TRACE_STOP_OPTIONS,
end_time.to_f)
end
:transaction_stopped
rescue => e
state.reset
NewRelic::Agent.logger.error("Exception during Transaction.stop", e)
nil
end