Class: NewRelic::Agent::OpenTelemetry::Trace::Tracer
- Inherits:
-
OpenTelemetry::Trace::Tracer
- Object
- OpenTelemetry::Trace::Tracer
- NewRelic::Agent::OpenTelemetry::Trace::Tracer
- Defined in:
- lib/new_relic/agent/opentelemetry/trace/tracer.rb
Instance Method Summary collapse
- #in_span(name, attributes: nil, links: nil, start_timestamp: nil, kind: nil) ⇒ Object
-
#initialize(name = nil, version = nil) ⇒ Tracer
constructor
A new instance of Tracer.
- #start_span(name, with_parent: nil, attributes: nil, links: nil, start_timestamp: nil, kind: nil) ⇒ Object
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: , 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 |