diff --git a/app/logical/danbooru_logger.rb b/app/logical/danbooru_logger.rb index 36024449c..c6d32cd15 100644 --- a/app/logical/danbooru_logger.rb +++ b/app/logical/danbooru_logger.rb @@ -9,4 +9,33 @@ class DanbooruLogger ::NewRelic::Agent.notice_error(exception, expected: expected, custom_params: params) end end + + def self.initialize(request, session, user) + add_attributes("request.params", request.params) + add_attributes("session.params", session.to_h) + add_attributes("user", { id: user.id, name: user.name, level: user.level_string, ip: request.remote_ip }) + end + + def self.add_attributes(prefix, hash) + return unless defined?(::NewRelic) + + attributes = flatten_hash(hash).transform_keys { |key| "#{prefix}.#{key}" } + ::NewRelic::Agent.add_custom_attributes(attributes) + end + + private + + # flatten_hash({ foo: { bar: { baz: 42 } } }) + # => { "foo.bar.baz" => 42 } + def self.flatten_hash(hash) + hash.each_with_object({}) do |(k, v), h| + if v.is_a?(Hash) + flatten_hash(v).map do|h_k, h_v| + h["#{k}.#{h_k}"] = h_v + end + else + h[k.to_s] = v + end + end + end end diff --git a/app/logical/session_loader.rb b/app/logical/session_loader.rb index a2903b0d8..851291022 100644 --- a/app/logical/session_loader.rb +++ b/app/logical/session_loader.rb @@ -29,6 +29,7 @@ class SessionLoader update_last_ip_addr set_time_zone CurrentUser.user.unban! if CurrentUser.user.ban_expired? + DanbooruLogger.initialize(request, session, CurrentUser.user) end private