Class: NewRelic::Agent::OpenTelemetry::Trace::Tracer

Inherits:
OpenTelemetry::Trace::Tracer
  • Object
show all
Defined in:
lib/new_relic/agent/opentelemetry/trace/tracer.rb

Instance Method Summary collapse

Constructor Details

#initialize(name = nil, version = nil) ⇒ Tracer

Returns a new instance of Tracer.



10
11
12
13
# File 'lib/new_relic/agent/opentelemetry/trace/tracer.rb', line 10

def initialize(name = nil, version = nil)
  @name = name || ''
  @version = version || ''
end

Instance Method Details

#in_span(name, attributes: nil, links: nil, start_timestamp: nil, kind: nil) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/new_relic/agent/opentelemetry/trace/tracer.rb', line 35

def in_span(name, attributes: nil, links: nil, start_timestamp: nil, kind: nil)
  span = start_span(name, attributes: attributes, links: links, start_timestamp: start_timestamp, kind: kind)
  begin
    yield
  rescue => e
    # TODO: Update for segment errors if finishable is a segment
    NewRelic::Agent.notice_error(e)
    raise
  end
ensure
  span&.finish
end

#start_span(name, with_parent: nil, attributes: nil, links: nil, start_timestamp: nil, kind: nil) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/new_relic/agent/opentelemetry/trace/tracer.rb', line 15

def start_span(name, with_parent: nil, attributes: nil, links: nil, start_timestamp: nil, kind: nil)
  parent_otel_context = ::OpenTelemetry::Trace.current_span(with_parent).context

  finishable = if can_start_transaction?(parent_otel_context)
    return if internal_span_kind_with_invalid_parent?(kind, parent_otel_context)

    nr_item = NewRelic::Agent::Tracer.start_transaction_or_segment(name: name, category: :otel)
    add_remote_context_to_txn(nr_item, parent_otel_context)
    nr_item
  else
    NewRelic::Agent::Tracer.start_segment(name: name)
  end

  otel_span = get_otel_span_from_finishable(finishable)
  otel_span.finishable = finishable
  add_remote_context_to_otel_span(otel_span, parent_otel_context)
  otel_span.add_attributes(attributes) if attributes
  otel_span
end