module OneApm::Agent::Datastore::Mongo::CommandFormatter

Constants

OA_BLACKLISTED_KEYS
OA_OBFUSCATE_KEYS
OA_OBFUSCATE_NOSQL_KEYS

Public Class Methods

format(event, status) click to toggle source
# File lib/one_apm/agent/datastore/mongo/command_formatter.rb, line 16
def self.format(event, status)
  return nil unless OneApm::Manager.config[:'mongo.capture_queries']
  result = {
    :operation  => event.command_name,
    :database   => event.database_name,
    :collection => event.command.values.first,
    :command    => event.command,
    :status     => status
  }

  event.command.each do |key, value|
    next if OA_BLACKLISTED_KEYS.include?(key)
    if OA_OBFUSCATE_KEYS.include?(key)
      obfuscated = obfuscate(value)
      result[key] = obfuscated if obfuscated
    else
      result[key] = value
    end
  end
  result
end
format_sql(event, status) click to toggle source
# File lib/one_apm/agent/datastore/mongo/command_formatter.rb, line 38
def self.format_sql(event, status)
  return nil unless OneApm::Manager.config[:'mongo.capture_queries']
  header = "db.#{event.command.values.first}.#{event.command_name}"
  obfuscate_sql = []
  event.command.each do |key, value|
    if OA_OBFUSCATE_NOSQL_KEYS.include?(key)
      if value.is_a?(Array)
        value.each do |val|
          obfuscate_sql << "(#{obfuscate_json(val)})"
        end 
      else 
        obfuscate_sql << "(#{obfuscate_json(value)})"
      end
    end
  end
  header.concat(obfuscate_sql.join(", "))
end
obfuscate(statement) click to toggle source
# File lib/one_apm/agent/datastore/mongo/command_formatter.rb, line 61
def self.obfuscate(statement)
  statement = Obfuscator.obfuscate_statement(statement) if OneApm::Manager.config[:'mongo.obfuscate_queries']
  statement
end
obfuscate_json(value) click to toggle source
# File lib/one_apm/agent/datastore/mongo/command_formatter.rb, line 56
def self.obfuscate_json value
  obfuscate_value = obfuscate(value)
  obfuscate_value.to_s.gsub('=>', ':').gsub('"', '') if obfuscate_value
end