class Atatus::Spies::SequelSpy

@api private

Constants

ACTION
TYPE

Public Class Methods

summarizer() click to toggle source
# File lib/atatus/spies/sequel.rb, line 30
def self.summarizer
  @summarizer ||= Sql.summarizer
end

Public Instance Methods

install() click to toggle source
# File lib/atatus/spies/sequel.rb, line 34
def install
  require 'sequel/database/logging'

  if defined?(::Sequel) && defined?(::Sequel::Database)

    ::Sequel::Database.class_eval do
      alias log_connection_yield_without_apm log_connection_yield

      def log_connection_yield(sql, connection, args = nil, &block)
        unless Atatus.current_transaction
          return log_connection_yield_without_apm(
            sql, connection, args, &block
          )
        end

        subtype = database_type.to_s

        name =
          Atatus::Spies::SequelSpy.summarizer.summarize sql

        context = Atatus::Span::Context.new(
          db: { statement: sql, type: 'sql', user: opts[:user] },
          destination: { name: subtype, resource: subtype, type: TYPE }
        )

        span = Atatus.start_span(
          name,
          TYPE,
          subtype: subtype,
          action: ACTION,
          context: context
        )
        yield.tap do |result|
          if name =~ /^(UPDATE|DELETE)/
            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
      ensure
        Atatus.end_span
      end
    end
log_connection_yield(sql, connection, args = nil) { || ... } click to toggle source
# File lib/atatus/spies/sequel.rb, line 42
def log_connection_yield(sql, connection, args = nil, &block)
  unless Atatus.current_transaction
    return log_connection_yield_without_apm(
      sql, connection, args, &block
    )
  end

  subtype = database_type.to_s

  name =
    Atatus::Spies::SequelSpy.summarizer.summarize sql

  context = Atatus::Span::Context.new(
    db: { statement: sql, type: 'sql', user: opts[:user] },
    destination: { name: subtype, resource: subtype, type: TYPE }
  )

  span = Atatus.start_span(
    name,
    TYPE,
    subtype: subtype,
    action: ACTION,
    context: context
  )
  yield.tap do |result|
    if name =~ /^(UPDATE|DELETE)/
      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