Module: Lapsoss::Adapters::Concerns::StacktraceBuilder

Extended by:
ActiveSupport::Concern
Included in:
OtlpAdapter
Defined in:
lib/lapsoss/adapters/concerns/stacktrace_builder.rb

Overview

Shared stacktrace building logic for adapters Provides consistent frame formatting across Sentry, OpenObserve, OTLP, etc.

Instance Method Summary collapse

Instance Method Details

#build_frame(frame) ⇒ Hash

Build a single frame hash from a BacktraceFrame

Parameters:

Returns:

  • (Hash)

    Formatted frame hash



28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/lapsoss/adapters/concerns/stacktrace_builder.rb', line 28

def build_frame(frame)
  frame_hash = {
    filename: frame.filename,
    abs_path: frame.absolute_path || frame.filename,
    function: frame.method_name || frame.function,
    lineno: frame.line_number,
    in_app: frame.in_app
  }

  add_code_context(frame_hash, frame) if frame.code_context.present?

  frame_hash.compact
end

#build_frames(event, reverse: false) ⇒ Array<Hash>

Build frames from event backtrace

Parameters:

  • event (Lapsoss::Event)

    The event with backtrace_frames

  • reverse (Boolean) (defaults to: false)

    Reverse frame order (Sentry expects oldest-to-newest)

Returns:

  • (Array<Hash>)

    Array of formatted frame hashes



18
19
20
21
22
23
# File 'lib/lapsoss/adapters/concerns/stacktrace_builder.rb', line 18

def build_frames(event, reverse: false)
  return [] unless event.has_backtrace?

  frames = event.backtrace_frames.map { |frame| build_frame(frame) }
  reverse ? frames.reverse : frames
end

#build_raw_stacktrace(event) ⇒ Array<String>

Build raw stacktrace string for logging/simple formats

Parameters:

Returns:

  • (Array<String>)

    Array of formatted frame strings



45
46
47
48
49
50
51
# File 'lib/lapsoss/adapters/concerns/stacktrace_builder.rb', line 45

def build_raw_stacktrace(event)
  return [] unless event.has_backtrace?

  event.backtrace_frames.map do |frame|
    "#{frame.absolute_path || frame.filename}:#{frame.line_number} in `#{frame.method_name}`"
  end
end

#build_stacktrace_string(event) ⇒ String

Build stacktrace as single string (for OTLP exception.stacktrace)

Parameters:

Returns:

  • (String)

    Newline-separated stacktrace



56
57
58
# File 'lib/lapsoss/adapters/concerns/stacktrace_builder.rb', line 56

def build_stacktrace_string(event)
  build_raw_stacktrace(event).join("\n")
end