Class: TIMEx::Telemetry::Adapters::OpenTelemetry

Inherits:
Base
  • Object
show all
Defined in:
lib/timex/telemetry/adapters.rb

Overview

Bridges TIMEx spans to OpenTelemetry when the gem is available.

Constant Summary collapse

ATTRIBUTE_TYPES =
[String, Symbol, Numeric, TrueClass, FalseClass, NilClass].freeze

Instance Method Summary collapse

Methods inherited from Base

#emit

Constructor Details

#initializeOpenTelemetry

Returns a new instance of OpenTelemetry.



116
117
118
119
# File 'lib/timex/telemetry/adapters.rb', line 116

def initialize
  super
  require "opentelemetry/api"
end

Instance Method Details

#finish(event:, payload:) ⇒ void

This method returns an undefined value.

Parameters:

  • event (Symbol, String)
  • payload (Hash{Symbol => Object})


135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/timex/telemetry/adapters.rb', line 135

def finish(event:, payload:)
  span = payload.delete(:__otel_span)
  return unless span

  span.set_attribute("timex.elapsed_ms", payload[:elapsed_ms]) if payload[:elapsed_ms] && span.respond_to?(:set_attribute)

  if span.respond_to?(:status=)
    case payload[:outcome]
    when :timeout
      span.status = ::OpenTelemetry::Trace::Status.error("timeout")
    when :error
      span.status = ::OpenTelemetry::Trace::Status.error(payload[:error_class].to_s)
    end
  end

  span.finish
end

#start(event:, payload:) ⇒ void

This method returns an undefined value.

Parameters:

  • event (Symbol, String)
  • payload (Hash{Symbol => Object})


124
125
126
127
128
129
130
# File 'lib/timex/telemetry/adapters.rb', line 124

def start(event:, payload:)
  tracer = ::OpenTelemetry.tracer_provider.tracer("timex")
  payload[:__otel_span] = tracer.start_span(
    event,
    attributes: coerce_attributes(payload)
  )
end