in lib/elastic_apm/spies/sequel.rb [36:83]
def log_connection_yield(sql, connection, args = nil, &block)
unless ElasticAPM.current_transaction
return super(sql, connection, args, &block)
end
subtype = database_type.to_s
name =
ElasticAPM::Spies::SequelSpy.summarizer.summarize sql
db_name = ''
db_name = connection&.db.to_s if connection.respond_to?(:db)
db_name = connection&.filename.to_s if db_name == '' && connection.respond_to?(:filename)
db_name = connection.class.to_s if db_name == ''
context = ElasticAPM::Span::Context.new(
db: { statement: sql, type: 'sql', user: opts[:user] },
service: {target: {type: subtype, name: db_name }},
destination: { service: { resource: subtype } }
)
span = ElasticAPM.start_span(
name,
TYPE,
subtype: subtype,
action: ACTION,
context: context
)
super(sql, connection, args, &block).tap do |result|
if /^(UPDATE|DELETE)/.match?(name)
if connection.respond_to?(:changes)
span.context.db.rows_affected = connection.changes
elsif result.is_a?(Integer)
span.context.db.rows_affected = result
end
end
end
rescue
span&.outcome = Span::Outcome::FAILURE
raise
ensure
span&.outcome ||= Span::Outcome::SUCCESS
ElasticAPM.end_span
end