class Xhummingbird::Rack::CaptureException

Constants

CONVERT_KEYS
HTTP_HEADER_PREFIX

Public Class Methods

new(app) click to toggle source
# File lib/xhummingbird/rack/capture_exception.rb, line 21
def initialize(app)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/xhummingbird/rack/capture_exception.rb, line 25
def call(env)
  begin
    response = @app.call(env)
  rescue => e
    Xhummingbird.send_exception(e, tags: convert_to_rack_tags(env))
  end

  error = env['rack.exception'] || env['sinatra.error']

  if error
    level = (400..499).include?(response.first.to_i) ? 0 : 2

    Xhummingbird.send_exception(error, level: level, tags: convert_to_rack_tags(env))
  end

  response
end

Private Instance Methods

convert_to_rack_tags(env) click to toggle source
# File lib/xhummingbird/rack/capture_exception.rb, line 45
def convert_to_rack_tags(env)
  tags = {}

  env.each do |k, v|
    if CONVERT_KEYS.include?(k) || k.start_with?(HTTP_HEADER_PREFIX)
      begin
        tags["rack_env/" +  k.to_s] = v.to_s
      rescue => e
        Xhummingbird.debug(e)
      end
    end
  end

  tags
end