Sha256: 92b3955bec86b6ae3bacdfac2cb2a55fa71bb5e9121fe971f05103bc975f9a51

Contents?: true

Size: 1.18 KB

Versions: 7

Compression:

Stored size: 1.18 KB

Contents

module Vx
  module Instrumentation
    module Rack

      HandleExceptionsMiddleware = Struct.new(:app) do

        IGNORED_EXCEPTIONS = %w{
          ActionController::RoutingError
        }

        def clean_env(env)
          env = env.select{|k,v| k !~ /^(action_dispatch|puma|session|rack\.session|action_controller)/ }
          env['HTTP_COOKIE'] &&= env['HTTP_COOKIE'].scan(/.{80}/).join("\n")
          env
        end

        def notify(exception, env)
          unless ignore?(exception)
            Vx::Instrumentation.handle_exception(
              'handle_exception.rack',
              exception,
              clean_env(env)
            )
          end
        end

        def call(env)
          begin
            response = app.call(env)
          rescue Exception => ex
            notify ex, env
            raise ex
          end

          if ex = framework_exception(env)
            notify ex, env
          end

          response
        end

        def framework_exception(env)
          env['rack.exception'] || env['action_dispatch.exception']
        end

        def ignore?(ex)
          IGNORED_EXCEPTIONS.include? ex.class.name
        end

      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
vx-instrumentation-0.1.8 lib/vx/instrumentation/rack/handle_exceptions_middleware.rb
vx-instrumentation-0.1.7 lib/vx/instrumentation/rack/handle_exceptions_middleware.rb
vx-instrumentation-0.1.6 lib/vx/instrumentation/rack/handle_exceptions_middleware.rb
vx-instrumentation-0.1.5 lib/vx/instrumentation/rack/handle_exceptions_middleware.rb
vx-instrumentation-0.1.4 lib/vx/instrumentation/rack/handle_exceptions_middleware.rb
vx-instrumentation-0.1.3 lib/vx/instrumentation/rack/handle_exceptions_middleware.rb
vx-instrumentation-0.1.2 lib/vx/instrumentation/rack/handle_exceptions_middleware.rb