Class: DiscordRDA::Tracer

Inherits:
Object
  • Object
show all
Defined in:
lib/discord_rda/core/tracer.rb

Defined Under Namespace

Classes: Span

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(enabled: false, logger: nil) ⇒ Tracer

Returns a new instance of Tracer.



9
10
11
12
# File 'lib/discord_rda/core/tracer.rb', line 9

def initialize(enabled: false, logger: nil)
  @enabled = enabled
  @logger = logger
end

Instance Attribute Details

#enabledObject (readonly)

Returns the value of attribute enabled.



7
8
9
# File 'lib/discord_rda/core/tracer.rb', line 7

def enabled
  @enabled
end

Instance Method Details

#with_span(name, **attributes) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/discord_rda/core/tracer.rb', line 14

def with_span(name, **attributes)
  return yield unless enabled

  span = Span.new(name: name, attributes: attributes, started_at: Time.now.utc)
  if defined?(::OpenTelemetry::Trace)
    tracer = ::OpenTelemetry.tracer_provider.tracer('discord_rda')
    tracer.in_span(name, attributes: attributes) { yield }
  else
    yield
  end
rescue StandardError => e
  span.error = e
  raise
ensure
  if enabled

    span.finished_at = Time.now.utc
    @logger&.debug(
      'Trace span',
      span: span.name,
      duration_ms: ((span.finished_at - span.started_at) * 1000).round(2),
      error: span.error&.class&.name,
      **span.attributes
    )
  end
end