diff options
Diffstat (limited to 'actionpack/lib/action_dispatch')
| -rw-r--r-- | actionpack/lib/action_dispatch/http/request.rb | 14 | ||||
| -rw-r--r-- | actionpack/lib/action_dispatch/middleware/request_id.rb | 11 | 
2 files changed, 18 insertions, 7 deletions
diff --git a/actionpack/lib/action_dispatch/http/request.rb b/actionpack/lib/action_dispatch/http/request.rb index a1f84e5ace..0a13121b2b 100644 --- a/actionpack/lib/action_dispatch/http/request.rb +++ b/actionpack/lib/action_dispatch/http/request.rb @@ -20,6 +20,8 @@ module ActionDispatch      include ActionDispatch::Http::FilterParameters      include ActionDispatch::Http::URL +    HTTP_X_REQUEST_ID = "HTTP_X_REQUEST_ID".freeze # :nodoc: +      autoload :Session, 'action_dispatch/request/session'      autoload :Utils,   'action_dispatch/request/utils' @@ -243,6 +245,8 @@ module ActionDispatch        @remote_ip ||= (@env["action_dispatch.remote_ip"] || ip).to_s      end +    ACTION_DISPATCH_REQUEST_ID = "action_dispatch.request_id".freeze # :nodoc: +      # Returns the unique request id, which is based on either the X-Request-Id header that can      # be generated by a firewall, load balancer, or web server or by the RequestId middleware      # (which sets the action_dispatch.request_id environment variable). @@ -250,11 +254,19 @@ module ActionDispatch      # This unique ID is useful for tracing a request from end-to-end as part of logging or debugging.      # This relies on the rack variable set by the ActionDispatch::RequestId middleware.      def request_id -      @request_id ||= env["action_dispatch.request_id"] +      env[ACTION_DISPATCH_REQUEST_ID] +    end + +    def request_id=(id) +      env[ACTION_DISPATCH_REQUEST_ID] = id      end      alias_method :uuid, :request_id +    def x_request_id +      @env[HTTP_X_REQUEST_ID] +    end +      # Returns the lowercase name of the HTTP server software.      def server_software        (@env['SERVER_SOFTWARE'] && /^([a-zA-Z]+)/ =~ @env['SERVER_SOFTWARE']) ? $1.downcase : nil diff --git a/actionpack/lib/action_dispatch/middleware/request_id.rb b/actionpack/lib/action_dispatch/middleware/request_id.rb index b9ca524309..303f8e8c23 100644 --- a/actionpack/lib/action_dispatch/middleware/request_id.rb +++ b/actionpack/lib/action_dispatch/middleware/request_id.rb @@ -13,21 +13,20 @@ module ActionDispatch    # from multiple pieces of the stack.    class RequestId      X_REQUEST_ID = "X-Request-Id".freeze # :nodoc: -    ACTION_DISPATCH_REQUEST_ID = "action_dispatch.request_id".freeze # :nodoc: -    HTTP_X_REQUEST_ID = "HTTP_X_REQUEST_ID".freeze # :nodoc:      def initialize(app)        @app = app      end      def call(env) -      env[ACTION_DISPATCH_REQUEST_ID] = external_request_id(env) || internal_request_id -      @app.call(env).tap { |_status, headers, _body| headers[X_REQUEST_ID] = env[ACTION_DISPATCH_REQUEST_ID] } +      req = ActionDispatch::Request.new env +      req.request_id = external_request_id(req) || internal_request_id +      @app.call(env).tap { |_status, headers, _body| headers[X_REQUEST_ID] = req.request_id }      end      private -      def external_request_id(env) -        if request_id = env[HTTP_X_REQUEST_ID].presence +      def external_request_id(req) +        if request_id = req.x_request_id.presence            request_id.gsub(/[^\w\-]/, "".freeze).first(255)          end        end  | 
