in lib/elastic_apm/instrumenter.rb [106:144]
def start_transaction(
name = nil,
type = nil,
config:,
context: nil,
trace_context: nil
)
return nil unless config.instrument?
if (transaction = current_transaction)
raise ExistingTransactionError,
"Transactions may not be nested.\n" \
"Already inside #{transaction.inspect}"
end
if trace_context
sampled = trace_context.recorded?
sample_rate = trace_context.tracestate.sample_rate
else
sampled = random_sample?(config)
sample_rate = sampled ? config.transaction_sample_rate : 0
end
transaction =
Transaction.new(
name,
type,
context: context,
trace_context: trace_context,
sampled: sampled,
sample_rate: sample_rate,
config: config
)
transaction.start
self.current_transaction = transaction
end