class Jaeger::Span

Attributes

context[R]
end_time[R]
logs[R]
operation_name[RW]
references[R]
start_time[R]
tags[R]

Public Class Methods

new(context, operation_name, reporter, start_time: Time.now, references: [], tags: {}) click to toggle source

Creates a new {Span}

@param context [SpanContext] the context of the span @param operation_name [String] the operation name @param reporter [#report] span reporter

@return [Span] a new Span

# File lib/jaeger/span.rb, line 18
def initialize(context, operation_name, reporter, start_time: Time.now, references: [], tags: {})
  @context = context
  @operation_name = operation_name
  @reporter = reporter
  @start_time = start_time
  @references = references
  @tags = []
  @logs = []

  tags.each { |key, value| set_tag(key, value) }
end

Public Instance Methods

finish(end_time: Time.now) click to toggle source

Finish the {Span}

@param end_time [Time] custom end time, if not now

# File lib/jaeger/span.rb, line 92
def finish(end_time: Time.now)
  @end_time = end_time
  @reporter.report(self)
end
get_baggage_item(key) click to toggle source

Get a baggage item

@param key [String] the key of the baggage item

@return Value of the baggage item

# File lib/jaeger/span.rb, line 67
def get_baggage_item(key)
  @context.get_baggage_item(key)
end
log(*args) click to toggle source

Add a log entry to this span

@deprecated Use {#log_kv} instead.

# File lib/jaeger/span.rb, line 74
def log(*args)
  warn 'Span#log is deprecated. Please use Span#log_kv instead.'
  log_kv(*args)
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/jaeger/span.rb, line 83
def log_kv(timestamp: Time.now, **fields)
  # Using Thrift::Log to avoid unnecessary memory allocations
  @logs << ThriftLogBuilder.build(timestamp, fields)
  nil
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/jaeger/span.rb, line 57
def set_baggage_item(key, value)
  @context.set_baggage_item(key, value)
  self
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/jaeger/span.rb, line 35
def set_tag(key, value)
  if key == 'sampling.priority'
    if value.to_i > 0
      return self if @context.debug?

      @context.flags = @context.flags | SpanContext::Flags::SAMPLED | SpanContext::Flags::DEBUG
    else
      @context.flags = @context.flags & ~SpanContext::Flags::SAMPLED
    end
    return self
  end

  # Using Thrift::Tag to avoid unnecessary memory allocations
  @tags << ThriftTagBuilder.build(key, value)

  self
end