trabajo-afectivo/app/controllers/application_controller/logs_http_access.rb

69 lines
1.8 KiB
Ruby
Raw Normal View History

module ApplicationController::LogsHttpAccess
extend ActiveSupport::Concern
included do
after_action :http_log
end
private
def http_log_config(config)
@http_log_support = config
end
# log http access
def http_log
return if !@http_log_support
# request
request_data = {
content: '',
content_type: request.headers['Content-Type'],
content_encoding: request.headers['Content-Encoding'],
source: request.headers['User-Agent'] || request.headers['Server'],
}
request.headers.each do |key, value|
next if key[0, 5] != 'HTTP_'
request_data[:content] += if key == 'HTTP_COOKIE'
"#{key}: xxxxx\n"
else
"#{key}: #{value}\n"
end
end
body = request.body.read
if body
request_data[:content] += "\n#{body}"
end
request_data[:content] = request_data[:content].slice(0, 8000)
# response
response_data = {
code: response.status = response.code,
content: '',
content_type: nil,
content_encoding: nil,
source: nil,
}
response.headers.each do |key, value|
response_data[:content] += "#{key}: #{value}\n"
end
body = response.body
if body
response_data[:content] += "\n#{body}"
end
response_data[:content] = response_data[:content].slice(0, 8000)
record = {
direction: 'in',
facility: @http_log_support[:facility],
url: url_for(only_path: false, overwrite_params: {}),
status: response.status,
ip: request.remote_ip,
request: request_data,
response: response_data,
method: request.method,
}
HttpLog.create(record)
end
end