class ElasticAPM::Span

@api private

Constants

DEFAULT_TYPE

Attributes

action[RW]
context[R]
duration[R]
exit_span[RW]
exit_span?[RW]
name[RW]
original_backtrace[RW]
outcome[RW]
parent[R]
sample_rate[R]
self_time[R]
stacktrace[R]
subtype[RW]
timestamp[R]
trace_context[RW]
transaction[R]
type[RW]

Public Class Methods

new( name:, transaction:, trace_context:, parent:, type: nil, subtype: nil, action: nil, context: nil, stacktrace_builder: nil, sync: nil, exit_span: false ) click to toggle source

rubocop:disable Metrics/ParameterLists

# File lib/elastic_apm/span.rb, line 42
def initialize(
  name:,
  transaction:,
  trace_context:,
  parent:,
  type: nil,
  subtype: nil,
  action: nil,
  context: nil,
  stacktrace_builder: nil,
  sync: nil,
  exit_span: false
)
  @name = name

  if subtype.nil? && type&.include?('.')
    @type, @subtype, @action = type.split('.')
  else
    @type = type || DEFAULT_TYPE
    @subtype = subtype
    @action = action
  end

  @transaction = transaction
  @parent = parent
  @trace_context = trace_context || parent.trace_context.child
  @sample_rate = transaction.sample_rate

  @context = context || Span::Context.new(sync: sync)
  @stacktrace_builder = stacktrace_builder

  @exit_span = exit_span
end

Public Instance Methods

done(clock_end: Util.monotonic_micros) click to toggle source
# File lib/elastic_apm/span.rb, line 119
def done(clock_end: Util.monotonic_micros)
  stop clock_end
  self
end
inspect() click to toggle source
# File lib/elastic_apm/span.rb, line 153
def inspect
  "<ElasticAPM::Span id:#{trace_context&.id}" \
    " name:#{name.inspect}" \
    " type:#{type.inspect}" \
    " subtype:#{subtype.inspect}" \
    " action:#{action.inspect}" \
    " exit_span:#{exit_span.inspect}" \
    '>'
end
prepare_for_serialization!() click to toggle source
# File lib/elastic_apm/span.rb, line 124
def prepare_for_serialization!
  build_stacktrace! if should_build_stacktrace?
  self.original_backtrace = nil # release original
end
running?() click to toggle source
# File lib/elastic_apm/span.rb, line 137
def running?
  started? && !stopped?
end
set_destination(address: nil, port: nil, service: nil, cloud: nil) click to toggle source
# File lib/elastic_apm/span.rb, line 141
def set_destination(address: nil, port: nil, service: nil, cloud: nil)
  context.destination = Span::Context::Destination.new(
    address: address,
    port: port,
    service: service,
    cloud: cloud
  )
  context.service = Span::Context::Service.new(
    target: Span::Context::Service::Target.new(name: context.destination.service.name, type: context.destination.service.type )
  )
end
start(clock_start = Util.monotonic_micros) click to toggle source

life cycle

# File lib/elastic_apm/span.rb, line 104
def start(clock_start = Util.monotonic_micros)
  @timestamp = Util.micros
  @clock_start = clock_start
  @parent.child_started
  self
end
started?() click to toggle source
# File lib/elastic_apm/span.rb, line 133
def started?
  !!timestamp
end
stop(clock_end = Util.monotonic_micros) click to toggle source
# File lib/elastic_apm/span.rb, line 111
def stop(clock_end = Util.monotonic_micros)
  @duration ||= (clock_end - @clock_start)
  @parent.child_stopped
  @self_time = @duration - child_durations.duration

  self
end
stopped?() click to toggle source
# File lib/elastic_apm/span.rb, line 129
def stopped?
  !!duration
end

Private Instance Methods

build_stacktrace!() click to toggle source
# File lib/elastic_apm/span.rb, line 165
def build_stacktrace!
  @stacktrace = @stacktrace_builder.build(original_backtrace, type: :span)
end
long_enough_for_stacktrace?() click to toggle source
# File lib/elastic_apm/span.rb, line 173
def long_enough_for_stacktrace?
  min_duration =
    @stacktrace_builder.config.span_frames_min_duration_us

  return true if min_duration < 0
  return false if min_duration == 0

  duration >= min_duration
end
should_build_stacktrace?() click to toggle source
# File lib/elastic_apm/span.rb, line 169
def should_build_stacktrace?
  @stacktrace_builder && original_backtrace && long_enough_for_stacktrace?
end