module Datadog::Contrib::MongoDB

MongoDB module includes classes and functions to instrument MongoDB clients

Constants

DEFAULT_OPTIONS
EXCLUDE_KEYS
PLACEHOLDER

skipped keys are related to command names, since they are already extracted by the query_builder

SHOW_KEYS

Public Instance Methods

configuration() click to toggle source
# File lib/ddtrace/contrib/mongodb/parsers.rb, line 63
def configuration
  Datadog.configuration[:mongo]
end
quantization_options() click to toggle source
# File lib/ddtrace/contrib/mongodb/parsers.rb, line 59
def quantization_options
  Datadog::Quantization::Hash.merge_options(DEFAULT_OPTIONS, configuration[:quantize])
end
quantize_statement(statement, skip = []) click to toggle source

removes the values from the given query; this quantization recursively replace elements available in a given query, so that Arrays, Hashes and so on are compacted. It ensures a low cardinality so that it can be used as a Span resource. @deprecated

# File lib/ddtrace/contrib/mongodb/parsers.rb, line 36
def quantize_statement(statement, skip = [])
  case statement
  when Hash
    statement.each_with_object({}) do |(key, value), quantized|
      quantized[key] = quantize_value(value, skip) unless skip.include?(key)
    end
  else
    quantize_value(statement, skip)
  end
end
quantize_value(value, skip = []) click to toggle source

@deprecated

# File lib/ddtrace/contrib/mongodb/parsers.rb, line 48
def quantize_value(value, skip = [])
  case value
  when Hash
    quantize_statement(value, skip)
  when Array
    quantize_value(value.first, skip)
  else
    PLACEHOLDER
  end
end
query_builder(command_name, database_name, command) click to toggle source

returns a formatted and normalized query

# File lib/ddtrace/contrib/mongodb/parsers.rb, line 16
def query_builder(command_name, database_name, command)
  # always exclude the command name
  options = Quantization::Hash.merge_options(quantization_options, exclude: [command_name.to_s])

  # quantized statements keys are strings to avoid leaking Symbols in older Rubies
  # as Symbols are not GC'ed in Rubies prior to 2.2
  base_info = Quantization::Hash.format({
                                          'operation' => command_name,
                                          'database' => database_name,
                                          'collection' => command.values.first
                                        }, options)

  base_info.merge(Quantization::Hash.format(command, options))
end