class StackifyRubyAPM::ErrorBuilder

@api private

Public Class Methods

new(agent) click to toggle source
# File lib/stackify_apm/error_builder.rb, line 8
def initialize(agent)
  @agent = agent
end

Public Instance Methods

build_exception(exception, handled: true) click to toggle source
# File lib/stackify_apm/error_builder.rb, line 12
def build_exception(exception, handled: true)
  error = Error.new
  error.exception = Error::Exception.new(exception, handled: handled)

  if exception.backtrace
    add_stacktrace error, :exception, exception.backtrace
  end

  add_transaction_id error

  if (transaction = StackifyRubyAPM.current_transaction)
    error.context = transaction.context.dup
  end

  error
end
build_log(message, backtrace: nil, **attrs) click to toggle source
# File lib/stackify_apm/error_builder.rb, line 29
def build_log(message, backtrace: nil, **attrs)
  error = Error.new
  error.log = Error::Log.new(message, **attrs)

  add_stacktrace error, :log, backtrace if backtrace
  add_transaction_id error

  error
end

Private Instance Methods

add_stacktrace(error, kind, backtrace) click to toggle source
# File lib/stackify_apm/error_builder.rb, line 41
def add_stacktrace(error, kind, backtrace)
  stacktrace =
    @agent.stacktrace_builder.build(backtrace, :error)
  return unless stacktrace

  case kind
  when :exception
    error.exception.stacktrace = stacktrace
  when :log
    error.log.stacktrace = stacktrace
  end

  error.culprit = stacktrace.frames.first.function
end
add_transaction_id(error) click to toggle source
# File lib/stackify_apm/error_builder.rb, line 56
def add_transaction_id(error)
  return unless (transaction = StackifyRubyAPM.current_transaction)
  error.transaction_id = transaction.id
end