Module: LaunchDarklyObservability::ControllerHelpers

Extended by:
ActiveSupport::Concern
Defined in:
lib/launchdarkly_observability/rails.rb

Overview

Controller helper methods for Rails

These helpers provide convenient access to observability features within Rails controllers.

Instance Method Summary collapse

Instance Method Details

#launchdarkly_trace_idString?

Returns The current OpenTelemetry trace ID.

Returns:

  • (String, nil)

    The current OpenTelemetry trace ID



31
32
33
34
35
36
37
38
# File 'lib/launchdarkly_observability/rails.rb', line 31

def launchdarkly_trace_id
  return nil unless defined?(OpenTelemetry)

  span = OpenTelemetry::Trace.current_span
  return nil unless span&.context&.valid?

  span.context.hex_trace_id
end

#record_launchdarkly_exception(exception, attributes: {}) ⇒ Object

Parameters:

  • exception (Exception)

    The exception to record

  • attributes (Hash) (defaults to: {})

    Additional attributes



57
58
59
60
61
62
63
64
65
# File 'lib/launchdarkly_observability/rails.rb', line 57

def record_launchdarkly_exception(exception, attributes: {})
  return unless defined?(OpenTelemetry)

  span = OpenTelemetry::Trace.current_span
  return unless span

  span.record_exception(exception, attributes: SourceContext.exception_attributes(exception).merge(attributes))
  span.status = OpenTelemetry::Trace::Status.error(exception.message)
end

#with_launchdarkly_span(name, attributes: {}) {|span| ... } ⇒ Object

Returns The result of the block.

Parameters:

  • name (String)

    The span name

  • attributes (Hash) (defaults to: {})

    Span attributes

Yields:

  • (span)

    Block to execute within the span

Returns:

  • The result of the block



44
45
46
47
48
49
50
51
52
53
# File 'lib/launchdarkly_observability/rails.rb', line 44

def with_launchdarkly_span(name, attributes: {}, &block)
  return yield unless defined?(OpenTelemetry) && OpenTelemetry.tracer_provider

  tracer = OpenTelemetry.tracer_provider.tracer(
    'launchdarkly-ruby-rails',
    LaunchDarklyObservability::VERSION
  )

  tracer.in_span(name, attributes: attributes, &block)
end