class Skylight::Core::Normalizers::SQL

Normalizer for SQL requests

Constants

CAT

Public Instance Methods

normalize(trace, name, payload) click to toggle source

@param trace [Skylight::Messages::Trace::Builder] ignored, only present to match API @param name [String] ignored, only present to match API @param payload [Hash] @option payload [String] [:name] The SQL operation @option payload [Hash] [:binds] The bound parameters @return [Array]

# File lib/skylight/core/normalizers/sql.rb, line 15
def normalize(trace, name, payload)
  case payload[:name]
  when "SCHEMA".freeze, "CACHE".freeze
    return :skip
  else
    name  = CAT
    title = payload[:name] || "SQL".freeze
  end

  binds = payload[:binds]

  if binds && !binds.empty?
    binds = binds.map { |_col, val| val.inspect }
  end

  begin
    extracted_title, sql = extract_binds(trace.instrumenter, payload, binds)
    [name, extracted_title || title, sql]
  rescue => e
    config.logger.error "Failed to extract binds in SQL; sql=#{payload[:sql].inspect}; exception=#{e.inspect}"
    [name, title, nil]
  end
end

Private Instance Methods

extract_binds(instrumenter, payload, _precalculated) click to toggle source
# File lib/skylight/core/normalizers/sql.rb, line 41
def extract_binds(instrumenter, payload, _precalculated)
  instrumenter.process_sql(payload[:sql])
end