aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch/middleware/notifications.rb
blob: 01d2cbb435b4acb78363fa0e76b9ebb5bfbefaf7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
module ActionDispatch
  # Provide notifications in the middleware stack. Notice that for the before_dispatch
  # and after_dispatch notifications, we just send the original env, so we don't pile
  # up large env hashes in the queue. However, in exception cases, the whole env hash
  # is actually useful, so we send it all.
  class Notifications
    def initialize(app)
      @app = app
    end

    def call(stack_env)
      env = stack_env.dup
      ActiveSupport::Notifications.instrument("action_dispatch.before_dispatch", :env => env)

      ActiveSupport::Notifications.instrument!("action_dispatch.after_dispatch", :env => env) do
        @app.call(stack_env)
      end
    rescue Exception => exception
      ActiveSupport::Notifications.instrument('action_dispatch.exception',
        :env => stack_env, :exception => exception)
      raise exception
    end
  end
end