Class: Datadog::Trace::Listener

Inherits:
Object
  • Object
show all
Defined in:
lib/datadog/lambda/trace/listener.rb

Overview

TraceListener tracks tracing context information

Instance Method Summary collapse

Constructor Details

#initialize(handler_name:, function_name:, patch_http:, merge_xray_traces:) ⇒ Listener

Returns a new instance of Listener.



19
20
21
22
23
24
25
26
# File 'lib/datadog/lambda/trace/listener.rb', line 19

def initialize(handler_name:, function_name:, patch_http:,
               merge_xray_traces:)
  @handler_name = handler_name
  @function_name = function_name
  @merge_xray_traces = merge_xray_traces

  Datadog::Trace.patch_http if patch_http
end

Instance Method Details

#on_endObject



37
# File 'lib/datadog/lambda/trace/listener.rb', line 37

def on_end; end

#on_start(event:) ⇒ Object



28
29
30
31
32
33
34
35
# File 'lib/datadog/lambda/trace/listener.rb', line 28

def on_start(event:)
  trace_context = Datadog::Trace.extract_trace_context(event,
                                                       @merge_xray_traces)
  Datadog::Trace.trace_context = trace_context
  Datadog::Utils.logger.debug "extracted trace context #{trace_context}"
rescue StandardError => e
  Datadog::Utils.logger.error "couldn't read tracing context #{e}"
end

#on_wrap(request_context:, cold_start:, &block) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/datadog/lambda/trace/listener.rb', line 39

def on_wrap(request_context:, cold_start:, &block)
  options = get_option_tags(
    request_context: request_context,
    cold_start: cold_start
  )
  context = Datadog::Trace.trace_context
  source = context[:source] if context
  options[:tags]['_dd.parent_source'] = source if source && source != 'ddtrace'
  options[:resource] = @function_name
  options[:service] = 'aws.lambda'
  options[:span_type] = 'serverless'
  Datadog::Trace.apply_datadog_trace_context(Datadog::Trace.trace_context)
  Datadog::Trace.wrap_datadog(options) do
    block.call
  end
end