Class: ElasticAPM::Span Private

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
ChildDurations::Methods
Defined in:
lib/elastic_apm/span.rb,
lib/elastic_apm/span/context.rb,
lib/elastic_apm/span/context/db.rb,
lib/elastic_apm/span/context/http.rb,
lib/elastic_apm/span/context/links.rb,
lib/elastic_apm/span/context/message.rb,
lib/elastic_apm/span/context/service.rb,
lib/elastic_apm/span/context/destination.rb

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Defined Under Namespace

Classes: Context, Outcome

Constant Summary collapse

DEFAULT_TYPE =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

'custom'

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ChildDurations::Methods

#child_durations, #child_started, #child_stopped

Constructor Details

#initialize(name:, transaction:, trace_context:, parent:, type: nil, subtype: nil, action: nil, context: nil, stacktrace_builder: nil, sync: nil, exit_span: false) ⇒ Span

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

rubocop:disable Metrics/ParameterLists



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# 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

Instance Attribute Details

#actionObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



79
80
81
# File 'lib/elastic_apm/span.rb', line 79

def action
  @action
end

#contextObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



89
90
91
# File 'lib/elastic_apm/span.rb', line 89

def context
  @context
end

#durationObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



89
90
91
# File 'lib/elastic_apm/span.rb', line 89

def duration
  @duration
end

#exit_spanObject Also known as: exit_span?

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



79
80
81
# File 'lib/elastic_apm/span.rb', line 79

def exit_span
  @exit_span
end

#nameObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



79
80
81
# File 'lib/elastic_apm/span.rb', line 79

def name
  @name
end

#original_backtraceObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



79
80
81
# File 'lib/elastic_apm/span.rb', line 79

def original_backtrace
  @original_backtrace
end

#outcomeObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



79
80
81
# File 'lib/elastic_apm/span.rb', line 79

def outcome
  @outcome
end

#parentObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



89
90
91
# File 'lib/elastic_apm/span.rb', line 89

def parent
  @parent
end

#sample_rateObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



89
90
91
# File 'lib/elastic_apm/span.rb', line 89

def sample_rate
  @sample_rate
end

#self_timeObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



89
90
91
# File 'lib/elastic_apm/span.rb', line 89

def self_time
  @self_time
end

#stacktraceObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



89
90
91
# File 'lib/elastic_apm/span.rb', line 89

def stacktrace
  @stacktrace
end

#subtypeObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



79
80
81
# File 'lib/elastic_apm/span.rb', line 79

def subtype
  @subtype
end

#timestampObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



89
90
91
# File 'lib/elastic_apm/span.rb', line 89

def timestamp
  @timestamp
end

#trace_contextObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



79
80
81
# File 'lib/elastic_apm/span.rb', line 79

def trace_context
  @trace_context
end

#transactionObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



89
90
91
# File 'lib/elastic_apm/span.rb', line 89

def transaction
  @transaction
end

#typeObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



79
80
81
# File 'lib/elastic_apm/span.rb', line 79

def type
  @type
end

Instance Method Details

#done(clock_end: Util.monotonic_micros) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



119
120
121
122
# File 'lib/elastic_apm/span.rb', line 119

def done(clock_end: Util.monotonic_micros)
  stop clock_end
  self
end

#inspectObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



153
154
155
156
157
158
159
160
161
# 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!Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



124
125
126
127
# 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?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


137
138
139
# File 'lib/elastic_apm/span.rb', line 137

def running?
  started? && !stopped?
end

#set_destination(address: nil, port: nil, service: nil, cloud: nil) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



141
142
143
144
145
146
147
148
149
150
151
# 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) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

life cycle



104
105
106
107
108
109
# 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?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


133
134
135
# File 'lib/elastic_apm/span.rb', line 133

def started?
  !!timestamp
end

#stop(clock_end = Util.monotonic_micros) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



111
112
113
114
115
116
117
# 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?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


129
130
131
# File 'lib/elastic_apm/span.rb', line 129

def stopped?
  !!duration
end