Class: Datadog::Contrib::Sneakers::Tracer

Inherits:
Object
  • Object
show all
Defined in:
lib/ddtrace/contrib/sneakers/tracer.rb

Overview

Tracer is a Sneakers server-side middleware which traces executed jobs

Instance Method Summary collapse

Constructor Details

#initialize(app, *args) ⇒ Tracer

Returns a new instance of Tracer.



11
12
13
14
# File 'lib/ddtrace/contrib/sneakers/tracer.rb', line 11

def initialize(app, *args)
  @app = app
  @args = args
end

Instance Method Details

#call(deserialized_msg, delivery_info, metadata, handler) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/ddtrace/contrib/sneakers/tracer.rb', line 16

def call(deserialized_msg, delivery_info, , handler)
  trace_options = {
    service: configuration[:service_name],
    span_type: Datadog::Ext::AppTypes::WORKER,
    on_error: configuration[:error_handler]
  }

  tracer.trace(Ext::SPAN_JOB, trace_options) do |request_span|
    # Set analytics sample rate
    if Datadog::Contrib::Analytics.enabled?(configuration[:analytics_enabled])
      Datadog::Contrib::Analytics.set_sample_rate(request_span, configuration[:analytics_sample_rate])
    end

    # Measure service stats
    Contrib::Analytics.set_measured(request_span)

    request_span.resource = @app.to_proc.binding.eval('self.class').to_s
    request_span.set_tag(Ext::TAG_JOB_ROUTING_KEY, delivery_info.routing_key)
    request_span.set_tag(Ext::TAG_JOB_QUEUE, delivery_info.consumer.queue.name)

    request_span.set_tag(Ext::TAG_JOB_BODY, deserialized_msg) if configuration[:tag_body]

    @app.call(deserialized_msg, delivery_info, , handler)
  end
end