module Datadog::Contrib::Racecar::Event::ClassMethods

Class methods for Racecar events. Note, they share the same process method and before_trace method.

Public Instance Methods

configuration() click to toggle source
# File lib/ddtrace/contrib/racecar/event.rb, line 34
def configuration
  Datadog.configuration[:racecar]
end
process(span, event, _id, payload) click to toggle source
# File lib/ddtrace/contrib/racecar/event.rb, line 38
def process(span, event, _id, payload)
  span.service = configuration[:service_name]
  span.resource = payload[:consumer_class]

  # Tag as an external peer service
  span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)

  # Set analytics sample rate
  if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
    Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
  end

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

  span.set_tag(Ext::TAG_TOPIC, payload[:topic])
  span.set_tag(Ext::TAG_CONSUMER, payload[:consumer_class])
  span.set_tag(Ext::TAG_PARTITION, payload[:partition])
  span.set_tag(Ext::TAG_OFFSET, payload[:offset]) if payload.key?(:offset)
  span.set_tag(Ext::TAG_FIRST_OFFSET, payload[:first_offset]) if payload.key?(:first_offset)
  span.set_tag(Ext::TAG_MESSAGE_COUNT, payload[:message_count]) if payload.key?(:message_count)
  span.set_error(payload[:exception_object]) if payload[:exception_object]
end
span_options() click to toggle source
# File lib/ddtrace/contrib/racecar/event.rb, line 26
def span_options
  { service: configuration[:service_name] }
end
subscription(*args) click to toggle source
Calls superclass method
# File lib/ddtrace/contrib/racecar/event.rb, line 20
def subscription(*args)
  super.tap do |subscription|
    subscription.before_trace { ensure_clean_context! }
  end
end
tracer() click to toggle source
# File lib/ddtrace/contrib/racecar/event.rb, line 30
def tracer
  -> { configuration[:tracer] }
end

Private Instance Methods

ensure_clean_context!() click to toggle source

Context objects are thread-bound. If Racecar re-uses threads, context from a previous trace could leak into the new trace. This “cleans” current context, preventing such a leak.

# File lib/ddtrace/contrib/racecar/event.rb, line 68
def ensure_clean_context!
  return unless configuration[:tracer].call_context.current_span

  configuration[:tracer].provider.context = Context.new
end