module Raven::RackInterface
Public Instance Methods
from_rack(env_hash)
click to toggle source
# File lib/raven/integrations/rack.rb, line 70 def from_rack(env_hash) req = ::Rack::Request.new(env_hash) self.url = req.scheme && req.url.split('?').first self.method = req.request_method self.query_string = req.query_string self.data = read_data_from(req) self.cookies = req.cookies self.headers = format_headers_for_sentry(env_hash) self.env = format_env_for_sentry(env_hash) end
Private Instance Methods
format_env_for_sentry(env_hash)
click to toggle source
# File lib/raven/integrations/rack.rb, line 129 def format_env_for_sentry(env_hash) return env_hash if Raven.configuration.rack_env_whitelist.empty? env_hash.select do |k, _v| Raven.configuration.rack_env_whitelist.include? k.to_s end end
format_headers_for_sentry(env_hash)
click to toggle source
# File lib/raven/integrations/rack.rb, line 99 def format_headers_for_sentry(env_hash) env_hash.each_with_object({}) do |(key, value), memo| begin key = key.to_s # rack env can contain symbols next memo['X-Request-Id'] ||= Utils::RequestId.read_from(env_hash) if Utils::RequestId::REQUEST_ID_HEADERS.include?(key) next unless key.upcase == key # Non-upper case stuff isn't either # Rack adds in an incorrect HTTP_VERSION key, which causes downstream # to think this is a Version header. Instead, this is mapped to # env['SERVER_PROTOCOL']. But we don't want to ignore a valid header # if the request has legitimately sent a Version header themselves. # See: https://github.com/rack/rack/blob/028438f/lib/rack/handler/cgi.rb#L29 next if key == 'HTTP_VERSION' && value == env_hash['SERVER_PROTOCOL'] next if key == 'HTTP_COOKIE' # Cookies don't go here, they go somewhere else next unless key.start_with?('HTTP_') || %w(CONTENT_TYPE CONTENT_LENGTH).include?(key) # Rack stores headers as HTTP_WHAT_EVER, we need What-Ever key = key.sub(/^HTTP_/, "") key = key.split('_').map(&:capitalize).join('-') memo[key] = value.to_s rescue StandardError => e # Rails adds objects to the Rack env that can sometimes raise exceptions # when `to_s` is called. # See: https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/remote_ip.rb#L134 Raven.logger.warn("Error raised while formatting headers: #{e.message}") next end end end
read_data_from(request)
click to toggle source
See Sentry server default limits at github.com/getsentry/sentry/blob/master/src/sentry/conf/server.py
# File lib/raven/integrations/rack.rb, line 87 def read_data_from(request) if request.form_data? request.POST elsif request.body # JSON requests, etc data = request.body.read(4096 * 4) # Sentry server limit request.body.rewind data end rescue IOError => e e.message end