newrelic: log additional request headers.
Log the Referer header, as well as the Sec-Fetch-* headers. These are only sent by recent versions of Chrome; see https://www.w3.org/TR/fetch-metadata.
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
class DanbooruLogger
|
class DanbooruLogger
|
||||||
|
HEADERS = %w[referer sec-fetch-dest sec-fetch-mode sec-fetch-site sec-fetch-user]
|
||||||
|
|
||||||
def self.info(message, params = {})
|
def self.info(message, params = {})
|
||||||
Rails.logger.info(message)
|
Rails.logger.info(message)
|
||||||
|
|
||||||
@@ -22,9 +24,29 @@ class DanbooruLogger
|
|||||||
end
|
end
|
||||||
|
|
||||||
def self.add_session_attributes(request, session, user)
|
def self.add_session_attributes(request, session, user)
|
||||||
request_params = request.parameters.with_indifferent_access.except(:controller, :action)
|
add_attributes("request.headers", header_params(request))
|
||||||
session_params = session.to_h.with_indifferent_access.slice(:session_id, :started_at)
|
add_attributes("request.params", request_params(request))
|
||||||
user_params = {
|
add_attributes("session.params", session_params(session))
|
||||||
|
add_attributes("user", user_params(request, user))
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.header_params(request)
|
||||||
|
headers = request.headers.to_h.select { |header, value| header.match?(/\AHTTP_/) }
|
||||||
|
headers = headers.transform_keys { |header| header.delete_prefix("HTTP_").downcase }
|
||||||
|
headers = headers.select { |header, value| header.in?(HEADERS) }
|
||||||
|
headers
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.request_params(request)
|
||||||
|
request.parameters.with_indifferent_access.except(:controller, :action)
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.session_params(session)
|
||||||
|
session.to_h.with_indifferent_access.slice(:session_id, :started_at)
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.user_params(request, user)
|
||||||
|
{
|
||||||
id: user&.id,
|
id: user&.id,
|
||||||
name: user&.name,
|
name: user&.name,
|
||||||
level: user&.level_string,
|
level: user&.level_string,
|
||||||
@@ -32,22 +54,21 @@ class DanbooruLogger
|
|||||||
country: request.headers["CF-IPCountry"],
|
country: request.headers["CF-IPCountry"],
|
||||||
safe_mode: CurrentUser.safe_mode?
|
safe_mode: CurrentUser.safe_mode?
|
||||||
}
|
}
|
||||||
|
|
||||||
add_attributes("request.params", request_params)
|
|
||||||
add_attributes("session.params", session_params)
|
|
||||||
add_attributes("user", user_params)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.add_attributes(prefix, hash)
|
def self.add_attributes(prefix, hash)
|
||||||
return unless defined?(::NewRelic)
|
|
||||||
|
|
||||||
attributes = flatten_hash(hash).transform_keys { |key| "#{prefix}.#{key}" }
|
attributes = flatten_hash(hash).transform_keys { |key| "#{prefix}.#{key}" }
|
||||||
attributes.delete_if { |key, value| key.end_with?(*Rails.application.config.filter_parameters.map(&:to_s)) }
|
attributes.delete_if { |key, value| key.end_with?(*Rails.application.config.filter_parameters.map(&:to_s)) }
|
||||||
::NewRelic::Agent.add_custom_attributes(attributes)
|
add_custom_attributes(attributes)
|
||||||
end
|
end
|
||||||
|
|
||||||
private_class_method
|
private_class_method
|
||||||
|
|
||||||
|
def self.add_custom_attributes(attributes)
|
||||||
|
return unless defined?(::NewRelic)
|
||||||
|
::NewRelic::Agent.add_custom_attributes(attributes)
|
||||||
|
end
|
||||||
|
|
||||||
# flatten_hash({ foo: { bar: { baz: 42 } } })
|
# flatten_hash({ foo: { bar: { baz: 42 } } })
|
||||||
# => { "foo.bar.baz" => 42 }
|
# => { "foo.bar.baz" => 42 }
|
||||||
def self.flatten_hash(hash)
|
def self.flatten_hash(hash)
|
||||||
|
|||||||
Reference in New Issue
Block a user