class Mnemosyne::Middleware::Rack
Public Class Methods
new(app)
click to toggle source
# File lib/mnemosyne/middleware/rack.rb, line 57 def initialize(app) @app = app end
Public Instance Methods
call(env)
click to toggle source
# File lib/mnemosyne/middleware/rack.rb, line 61 def call(env) origin = env.fetch('HTTP_X_MNEMOSYNE_ORIGIN', false) transaction = env.fetch('HTTP_X_MNEMOSYNE_TRANSACTION') do ::SecureRandom.uuid end trace = ::Mnemosyne::Instrumenter.trace 'app.web.request.rack', transaction: transaction, origin: origin if trace trace.start! scan_request(trace, env) response = @app.call env scan_response(trace, response) response[2] = Proxy.new(response[2], trace) response else @app.call env end rescue StandardError, LoadError, SyntaxError => e if trace trace.attach_error(e) trace.submit end raise ensure trace&.release end
Private Instance Methods
scan_request(trace, env)
click to toggle source
# File lib/mnemosyne/middleware/rack.rb, line 98 def scan_request(trace, env) trace.meta[:method] = env['REQUEST_METHOD'] trace.meta[:path] = env['REQUEST_PATH'] trace.meta[:query] = env['QUERY_STRING'] trace.meta[:protocol] = env['SERVER_PROTOCOL'] trace.meta[:headers] = { Accept: env['HTTP_ACCEPT'], Host: env['HTTP_HOST'], 'User-Agent': env['HTTP_USER_AGENT'] } end
scan_response(trace, response)
click to toggle source
# File lib/mnemosyne/middleware/rack.rb, line 110 def scan_response(trace, response) status, headers, = response trace.meta[:status] = status return unless headers trace.meta.merge!({ content_type: headers['Content-Type'], location: headers['Location'] }.compact) end