class ElasticAPM::Instrumenter

def transaction(*args)

rubocop:disable Metrics/MethodLength
def transaction(*args)
  if (transaction = current_transaction)
    yield transaction if block_given?
    return transaction
  end
  if args.last.is_a? Hash
    args.last[:sampled] = random_sample?
  else
    args.push(sampled: random_sample?)
  end
  transaction = Transaction.new self, *args
  self.current_transaction = transaction
  return transaction unless block_given?
  begin
    yield transaction
  ensure
    self.current_transaction = nil
    transaction.done
  end
  transaction
end