Class: Jaeger::Span

Inherits:
Object
  • Object
show all
Defined in:
lib/jaeger/span.rb,
lib/jaeger/span/thrift_log_builder.rb

Defined Under Namespace

Classes: ThriftLogBuilder

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(context, operation_name, reporter, start_time: Time.now, references: [], tags: {}) ⇒ Span

Creates a new Jaeger::Span

Parameters:

  • context (SpanContext)

    the context of the span

  • operation_name (String)

    the operation name

  • reporter (#report)

    span reporter



18
19
20
21
22
23
24
25
26
27
28
# 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

Instance Attribute Details

#contextObject (readonly)

Returns the value of attribute context.



9
10
11
# File 'lib/jaeger/span.rb', line 9

def context
  @context
end

#end_timeObject (readonly)

Returns the value of attribute end_time.



9
10
11
# File 'lib/jaeger/span.rb', line 9

def end_time
  @end_time
end

#logsObject (readonly)

Returns the value of attribute logs.



9
10
11
# File 'lib/jaeger/span.rb', line 9

def logs
  @logs
end

#operation_nameObject

Returns the value of attribute operation_name.



7
8
9
# File 'lib/jaeger/span.rb', line 7

def operation_name
  @operation_name
end

#referencesObject (readonly)

Returns the value of attribute references.



9
10
11
# File 'lib/jaeger/span.rb', line 9

def references
  @references
end

#start_timeObject (readonly)

Returns the value of attribute start_time.



9
10
11
# File 'lib/jaeger/span.rb', line 9

def start_time
  @start_time
end

#tagsObject (readonly)

Returns the value of attribute tags.



9
10
11
# File 'lib/jaeger/span.rb', line 9

def tags
  @tags
end

Instance Method Details

#finish(end_time: Time.now) ⇒ Object

Finish the Jaeger::Span

Parameters:

  • end_time (Time) (defaults to: Time.now)

    custom end time, if not now



92
93
94
95
# 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) ⇒ Object

Get a baggage item

Parameters:

  • key (String)

    the key of the baggage item

Returns:

  • Value of the baggage item



67
68
69
# File 'lib/jaeger/span.rb', line 67

def get_baggage_item(key)
  @context.get_baggage_item(key)
end

#logObject

Deprecated.

Use #log_kv instead.

Add a log entry to this span



74
75
76
77
# File 'lib/jaeger/span.rb', line 74

def log(...)
  warn 'Span#log is deprecated. Please use Span#log_kv instead.'
  log_kv(...)
end

#log_kv(timestamp: Time.now, **fields) ⇒ Object

Add a log entry to this span

Parameters:

  • timestamp (Time) (defaults to: Time.now)

    time of the log

  • fields (Hash)

    Additional information to log



83
84
85
86
87
# 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) ⇒ Object

Set a baggage item on the span

Parameters:

  • key (String)

    the key of the baggage item

  • value (String)

    the value of the baggage item



57
58
59
60
# 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) ⇒ Object

Set a tag value on this span

a String, Numeric, or Boolean it will be encoded with to_s

Parameters:

  • key (String)

    the key of the tag

  • value (String, Numeric, Boolean)

    the value of the tag. If it’s not



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/jaeger/span.rb', line 35

def set_tag(key, value)
  if key == 'sampling.priority'
    if value.to_i.positive?
      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