module Project106::RequestDataExtractor
Public Instance Methods
extract_request_data_from_payload(payload)
click to toggle source
Data to be sent to project-106 server through api call in case of routing error
# File lib/project_106/request_data_extractor.rb, line 48 def extract_request_data_from_payload(payload) # Note : remove this once finalize data to be send to project-106 server # { # "error_controller" => payload[:controller], # "error_action" => payload[:action], # "error_format" => payload[:format], # "method" => payload[:method], # "path" => payload[:path], # "error" => "routing error", # "error_info" => "It may be that the user have misspelled or devs have forgot to ensure the path" # } request_data = { :params => "", :url => payload[:path], :user_ip => "", :headers => "", :method => payload[:method], :error => { :message => "routing error", :backtrace => "", :error_controller => payload[:controller], :error_action => payload[:action], } } end
extract_request_data_from_rack(env, exception)
click to toggle source
Collecting data from rack to be send to project-106 server
# File lib/project_106/request_data_extractor.rb, line 4 def extract_request_data_from_rack(env, exception) rack_req = Rack::Request.new(env) request_params = project_106_request_params(env) get_params = project_106_get_params(rack_req) post_params = project_106_post_params(rack_req) cookies = project_106_request_cookies(rack_req) session = env['rack.session.options'] params = request_params.merge(get_params).merge(post_params) # Collect data from rails env. request_data = { :params => params, :url => project_106_url(env), :user_ip => project_106_user_ip(env), :headers => project_106_headers(env), :method => project_106_request_method(env), :error => { :message => exception.message, :backtrace => exception.backtrace, :error_controller => params[:controller], :error_action => params[:action] } } # Excluding session and cookies from request data # :cookies => cookies, # :session => session, # Data to be sent to project-106 server through api call in case of rails error except routing # sorting out data from request_data which might have extra data. # note : remove this once finalize data to be send to project-106 server # req_data = { # "error_controller" => request_data[:params][:controller], # "error_action" => request_data[:params][:action], # "error_format" => "Not Assigned", # "method" => request_data[:method], # "path" => request_data[:url], # "error" => "Not Assigned", # "error_info" => exception.inspect # } end
Private Instance Methods
project_106_get_params(rack_req)
click to toggle source
# File lib/project_106/request_data_extractor.rb, line 90 def project_106_get_params(rack_req) rack_req.GET rescue {} end
project_106_headers(env)
click to toggle source
# File lib/project_106/request_data_extractor.rb, line 123 def project_106_headers(env) env.keys.grep(/^HTTP_/).map do |header| name = header.gsub(/^HTTP_/, '').split('_').map(&:capitalize).join('-') { name => env[header] } end.inject(:merge) end
project_106_post_params(rack_req)
click to toggle source
# File lib/project_106/request_data_extractor.rb, line 96 def project_106_post_params(rack_req) rack_req.POST rescue {} end
project_106_request_method(env)
click to toggle source
# File lib/project_106/request_data_extractor.rb, line 130 def project_106_request_method(env) env['REQUEST_METHOD'] || env[:method] end
project_106_request_params(env)
click to toggle source
Methods for collecting data required in method “extract_request_data_from_rack” from rack
# File lib/project_106/request_data_extractor.rb, line 81 def project_106_request_params(env) route = ::Rails.application.routes.recognize_path(env['PATH_INFO']) rescue {} { :controller => route[:controller], :action => route[:action], :format => route[:format], }.merge(env['action_dispatch.request.parameters'] || {}) end
project_106_url(env)
click to toggle source
# File lib/project_106/request_data_extractor.rb, line 108 def project_106_url(env) scheme = env['rack.url_scheme'] host = env['HTTP_HOST'] || env['SERVER_NAME'] path = env['ORIGINAL_FULLPATH'] || env['REQUEST_URI'] unless path.nil? || path.empty? path = '/' + path.to_s if path.to_s.slice(0, 1) != '/' end [scheme, '://', host, path].join end
project_106_user_ip(env)
click to toggle source
# File lib/project_106/request_data_extractor.rb, line 119 def project_106_user_ip(env) (env['action_dispatch.remote_ip'] || env['HTTP_X_REAL_IP'] || env['HTTP_X_FORWARDED_FOR'] || env['REMOTE_ADDR']).to_s end