Module: OpenTelemetry::Instrumentation::Redis::Utils

Extended by:
Utils
Included in:
Utils
Defined in:
lib/opentelemetry/instrumentation/redis/utils.rb

Overview

Utility functions

Constant Summary collapse

PLACEHOLDER =
'?'
VALUE_MAX_LEN =
50
CMD_MAX_LEN =
500

Instance Method Summary collapse

Instance Method Details

#auth_command?(command_args) ⇒ Boolean

Returns:

  • (Boolean)


45
46
47
48
49
# File 'lib/opentelemetry/instrumentation/redis/utils.rb', line 45

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) ⇒ Object



36
37
38
39
40
41
42
43
# File 'lib/opentelemetry/instrumentation/redis/utils.rb', line 36

def format_arg(arg)
  str = arg.is_a?(Symbol) ? arg.to_s.upcase : arg.to_s
  str = OpenTelemetry::Common::Utilities.utf8_encode(str, binary: true)
  OpenTelemetry::Common::Utilities.truncate(str, VALUE_MAX_LEN)
rescue StandardError => e
  OpenTelemetry.logger.debug("non formattable Redis arg #{str}: #{e}")
  PLACEHOLDER
end

#format_command(command_args) ⇒ Object



18
19
20
# File 'lib/opentelemetry/instrumentation/redis/utils.rb', line 18

def format_command(command_args)
  format_arg(resolve_command_args(command_args).first)
end

#format_pipeline_statement(command_args) ⇒ Object



22
23
24
25
26
# File 'lib/opentelemetry/instrumentation/redis/utils.rb', line 22

def format_pipeline_statement(command_args)
  command_args[0].commands.map do |args|
    format_statement(args)
  end.join("\n")
end

#format_statement(command_args) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/opentelemetry/instrumentation/redis/utils.rb', line 28

def format_statement(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(' ')
  OpenTelemetry::Common::Utilities.truncate(cmd, CMD_MAX_LEN)
end

#resolve_command_args(command_args) ⇒ Object

Unwraps command array when Redis is called with the following syntax: redis.call([:cmd, 'arg1', …])



53
54
55
56
57
# File 'lib/opentelemetry/instrumentation/redis/utils.rb', line 53

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