Module: OneApm::Agent::Datastore::Mongo::CommandFormatter

Defined in:
lib/one_apm/agent/datastore/mongo/command_formatter.rb

Constant Summary collapse

OA_OBFUSCATE_KEYS =
[ 'filter', 'query',  ].freeze
OA_BLACKLISTED_KEYS =
[ 'deletes', 'documents', 'updates' ].freeze
OA_OBFUSCATE_NOSQL_KEYS =
[ 'filter', 'query', 'deletes', 'documents', 'updates' ].freeze

Class Method Summary collapse

Class Method Details

.format(event, status) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 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) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# 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) ⇒ Object



61
62
63
64
# 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) ⇒ Object



56
57
58
59
# 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