lib/grape_ape_rails/handlers/rails_logging.rb
module GrapeApeRails
module Handlers
class RailsLogging
def initialize(app)
@app = app
end
def call(env)
api_version = env['rack.routing_args'][:route_info].route_version rescue nil
payload = {
remote_addr: env['REMOTE_ADDR'],
request_method: env['REQUEST_METHOD'],
request_path: env['PATH_INFO'],
request_query: env['QUERY_STRING'],
api_version: api_version
}
req = Rack::Request.new(env)
payload[:params] = req.params
ActiveSupport::Notifications.instrument "grape.request", payload do
@app.call(env).tap do |response|
status, headers, body = *response
payload[:params].merge!(env["api.endpoint"].params.to_hash)
payload[:params].delete("route_info")
payload[:params].delete("format")
payload[:response_status] = status
end
end
rescue
@app.call(env)
end
end
end
end