module Datadog::Contrib::Redis::Quantize

Quantize contains Redis-specific resource quantization tools.

Constants

CMD_MAX_LEN
MULTI_VERB_COMMANDS
PLACEHOLDER
TOO_LONG_MARK
VALUE_MAX_LEN

Public Instance Methods

auth_command?(command_args) click to toggle source
# File lib/ddtrace/contrib/redis/quantize.rb, line 58
def auth_command?(command_args)
  return false unless command_args.is_a?(Array) && !command_args.empty?

  command_args.first.to_sym == :auth
end
format_arg(arg) click to toggle source
# File lib/ddtrace/contrib/redis/quantize.rb, line 29
def format_arg(arg)
  str = arg.is_a?(Symbol) ? arg.to_s.upcase : arg.to_s
  str = Utils.utf8_encode(str, binary: true, placeholder: PLACEHOLDER)
  Utils.truncate(str, VALUE_MAX_LEN, TOO_LONG_MARK)
rescue => e
  Datadog.logger.debug("non formattable Redis arg #{str}: #{e}")
  PLACEHOLDER
end
format_command_args(command_args) click to toggle source
# File lib/ddtrace/contrib/redis/quantize.rb, line 38
def format_command_args(command_args)
  command_args = resolve_command_args(command_args)
  return 'AUTH ?' if auth_command?(command_args)

  cmd = command_args.map { |x| format_arg(x) }.join(' ')
  Utils.truncate(cmd, CMD_MAX_LEN, TOO_LONG_MARK)
end
get_verb(command_args) click to toggle source
# File lib/ddtrace/contrib/redis/quantize.rb, line 46
def get_verb(command_args)
  return unless command_args.is_a?(Array)

  return get_verb(command_args.first) if command_args.first.is_a?(Array)

  arg = command_args.first
  verb = arg.is_a?(Symbol) ? arg.to_s.upcase : arg.to_s
  return verb unless MULTI_VERB_COMMANDS.include?(verb) && command_args[1]

  "#{verb} #{command_args[1]}"
end
resolve_command_args(command_args) click to toggle source

Unwraps command array when Redis is called with the following syntax:

redis.call([:cmd, 'arg1', ...])
# File lib/ddtrace/contrib/redis/quantize.rb, line 66
def resolve_command_args(command_args)
  return command_args.first if command_args.is_a?(Array) && command_args.first.is_a?(Array)

  command_args
end