class ScoutApm::Instruments::Moped

Attributes

context[R]

Public Class Methods

new(context) click to toggle source
# File lib/scout_apm/instruments/moped.rb, line 6
def initialize(context)
  @context = context
  @installed = false
end

Public Instance Methods

install() click to toggle source
# File lib/scout_apm/instruments/moped.rb, line 19
def install
  if defined?(::Moped)
    @installed = true

    logger.info "Instrumenting Moped"

    ::Moped::Node.class_eval do
      include ScoutApm::Tracer

      def process_with_scout_instruments(operation, &callback)
        if operation.respond_to?(:collection)
          collection = operation.collection
          name = "Process/#{collection}/#{operation.class.to_s.split('::').last}"
          self.class.instrument("MongoDB", name, :annotate_layer => { :query => scout_sanitize_log(operation.log_inspect) }) do
            process_without_scout_instruments(operation, &callback)
          end
        end
      end
      alias_method :process_without_scout_instruments, :process
      alias_method :process, :process_with_scout_instruments

      # replaces values w/ ?
      def scout_sanitize_log(log)
        return nil if log.length > 1000 # safeguard - don't sanitize large SQL statements
        log.gsub(/(=>")((?:[^"]|"")*)"/) do
          $1 + '?' + '"'
        end
      end
    end
  end
end
installed?() click to toggle source
# File lib/scout_apm/instruments/moped.rb, line 15
def installed?
  @installed
end
logger() click to toggle source
# File lib/scout_apm/instruments/moped.rb, line 11
def logger
  context.logger
end
process_with_scout_instruments(operation, &callback) click to toggle source
# File lib/scout_apm/instruments/moped.rb, line 28
def process_with_scout_instruments(operation, &callback)
  if operation.respond_to?(:collection)
    collection = operation.collection
    name = "Process/#{collection}/#{operation.class.to_s.split('::').last}"
    self.class.instrument("MongoDB", name, :annotate_layer => { :query => scout_sanitize_log(operation.log_inspect) }) do
      process_without_scout_instruments(operation, &callback)
    end
  end
end
scout_sanitize_log(log) click to toggle source

replaces values w/ ?

# File lib/scout_apm/instruments/moped.rb, line 41
def scout_sanitize_log(log)
  return nil if log.length > 1000 # safeguard - don't sanitize large SQL statements
  log.gsub(/(=>")((?:[^"]|"")*)"/) do
    $1 + '?' + '"'
  end
end