Sha256: 44c804bce76c542d3b247a10ea03d0e5a111579193e8821366b1e05b69329ac6

Contents?: true

Size: 1.49 KB

Versions: 8

Compression:

Stored size: 1.49 KB

Contents

module Timber
  module Events
    # The exception event is used to track exceptions.
    #
    # @note This event should be installed automatically through integrations,
    #   such as the {Integrations::ActionDispatch::DebugExceptions} integration.
    class Exception < Timber::Event
      attr_reader :name, :exception_message, :backtrace

      def initialize(attributes)
        @name = attributes[:name] || raise(ArgumentError.new(":name is required"))
        @exception_message = attributes[:exception_message] || raise(ArgumentError.new(":exception_message is required"))

        backtrace = attributes[:backtrace]
        if backtrace.nil? || backtrace == []
          raise(ArgumentError.new(":backtrace is required"))
        end

        # 10 items max
        @backtrace = backtrace[0..9].collect { |line| parse_backtrace_line(line) }
      end

      def to_hash
        {name: name, message: exception_message, backtrace: backtrace}
      end
      alias to_h to_hash

      def as_json(_options = {})
        {:server_side_app => {:exception => to_hash}}
      end

      def message
        "#{name} (#{exception_message})"
      end

      private
        def parse_backtrace_line(line)
          # using split for performance reasons
          file, line, function_part = line.split(":", 3)
          _prefix, function_pre = function_part.split("`", 2)
          function = Util::Object.try(function_pre, :chomp, "'")
          {file: file, line: line.to_i, function: function}
        end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
timber-2.0.17 lib/timber/events/exception.rb
timber-2.0.16 lib/timber/events/exception.rb
timber-2.0.15 lib/timber/events/exception.rb
timber-2.0.14 lib/timber/events/exception.rb
timber-2.0.12 lib/timber/events/exception.rb
timber-2.0.11 lib/timber/events/exception.rb
timber-2.0.10 lib/timber/events/exception.rb
timber-2.0.9 lib/timber/events/exception.rb