Module: Datadog::Contrib::Redis::Instrumentation::InstanceMethods

Defined in:
lib/ddtrace/contrib/redis/instrumentation.rb

Overview

InstanceMethods - implementing instrumentation

Instance Method Summary collapse

Instance Method Details

#call(*args, &block) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/ddtrace/contrib/redis/instrumentation.rb', line 17

def call(*args, &block)
  pin = Datadog::Pin.get_from(self)
  return super unless pin && pin.tracer

  response = nil
  pin.tracer.trace(Datadog::Contrib::Redis::Ext::SPAN_COMMAND) do |span|
    span.service = pin.service
    span.span_type = Datadog::Contrib::Redis::Ext::TYPE
    span.resource = get_command(args)
    Datadog::Contrib::Redis::Tags.set_common_tags(self, span)

    response = super
  end

  response
end

#call_pipeline(*args, &block) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/ddtrace/contrib/redis/instrumentation.rb', line 34

def call_pipeline(*args, &block)
  pin = Datadog::Pin.get_from(self)
  return super unless pin && pin.tracer

  response = nil
  pin.tracer.trace(Datadog::Contrib::Redis::Ext::SPAN_COMMAND) do |span|
    span.service = pin.service
    span.span_type = Datadog::Contrib::Redis::Ext::TYPE
    commands = get_pipeline_commands(args)
    span.resource = commands.join("\n")
    span.set_metric Datadog::Contrib::Redis::Ext::METRIC_PIPELINE_LEN, commands.length
    Datadog::Contrib::Redis::Tags.set_common_tags(self, span)

    response = super
  end

  response
end

#datadog_pinObject



53
54
55
56
57
58
59
60
61
62
63
# File 'lib/ddtrace/contrib/redis/instrumentation.rb', line 53

def datadog_pin
  @datadog_pin ||= begin
    pin = Datadog::Pin.new(
      datadog_configuration[:service_name],
      app: Ext::APP,
      app_type: Datadog::Ext::AppTypes::DB,
      tracer: -> { datadog_configuration[:tracer] }
    )
    pin.onto(self)
  end
end