class Datadog::OpenTracer::Span

OpenTracing adapter for Datadog::Span

Attributes

datadog_span[R]

Public Class Methods

new(datadog_span:, span_context:) click to toggle source
# File lib/ddtrace/opentracer/span.rb, line 8
def initialize(datadog_span:, span_context:)
  @datadog_span = datadog_span
  @span_context = span_context
end

Public Instance Methods

context() click to toggle source

Span Context

@return [SpanContext]

# File lib/ddtrace/opentracer/span.rb, line 23
def context
  @span_context
end
finish(end_time: Time.now) click to toggle source

Finish the {Span} @param end_time [Time] custom end time, if not now

# File lib/ddtrace/opentracer/span.rb, line 93
def finish(end_time: Time.now)
  datadog_span.finish(end_time)
end
get_baggage_item(key) click to toggle source

Get a baggage item @param key [String] the key of the baggage item @return [String] value of the baggage item

# File lib/ddtrace/opentracer/span.rb, line 60
def get_baggage_item(key)
  context.baggage[key]
end
log(event: nil, timestamp: Time.now, **fields) click to toggle source

@deprecated Use {#log_kv} instead. Reason: event is an optional standard log field defined in spec and not required. Also, method name {#log_kv} is more consistent with other language implementations such as Python and Go.

Add a log entry to this span @param event [String] event name for the log @param timestamp [Time] time of the log @param fields [Hash] Additional information to log

Calls superclass method
# File lib/ddtrace/opentracer/span.rb, line 72
def log(event: nil, timestamp: Time.now, **fields)
  super # Log deprecation warning

  # If the fields specify an error
  if fields.key?(:'error.object')
    datadog_span.set_error(fields[:'error.object'])
  end
end
log_kv(timestamp: Time.now, **fields) click to toggle source

Add a log entry to this span @param timestamp [Time] time of the log @param fields [Hash] Additional information to log

# File lib/ddtrace/opentracer/span.rb, line 84
def log_kv(timestamp: Time.now, **fields)
  # If the fields specify an error
  if fields.key?(:'error.object')
    datadog_span.set_error(fields[:'error.object'])
  end
end
operation_name=(name) click to toggle source

Set the name of the operation

@param [String] name

# File lib/ddtrace/opentracer/span.rb, line 16
def operation_name=(name)
  datadog_span.name = name
end
set_baggage_item(key, value) click to toggle source

Set a baggage item on the span @param key [String] the key of the baggage item @param value [String] the value of the baggage item

# File lib/ddtrace/opentracer/span.rb, line 46
def set_baggage_item(key, value)
  tap do
    # SpanContext is immutable, so to make changes
    # build a new span context.
    @span_context = SpanContextFactory.clone(
      span_context: context,
      baggage: { key => value }
    )
  end
end
set_tag(key, value) click to toggle source

Set a tag value on this span @param key [String] the key of the tag @param value [String, Numeric, Boolean] the value of the tag. If it's not a String, Numeric, or Boolean it will be encoded with to_s

# File lib/ddtrace/opentracer/span.rb, line 31
def set_tag(key, value)
  # Special cases to convert opentracing tags to datadog tags
  case key
  when 'error'
    # Opentracing supports and `error: <bool>` tag, we need to convert to span status
    # DEV: Do not return, we want to still set the `error` tag as they requested
    datadog_span.status = value ? Datadog::Ext::Errors::STATUS : 0
  end

  tap { datadog_span.set_tag(key, value) }
end