Class: Rack::Bug::SpeedTrace::TraceApp
- Inherits:
-
Object
- Object
- Rack::Bug::SpeedTrace::TraceApp
- Defined in:
- lib/rack/bug/panels/speedtracer_panel/trace-app.rb
Constant Summary collapse
- TRACER_PATH =
/^\/speedtracer/.freeze
- CONTENT_TYPE =
'application/json;charset=UTF-8'.freeze
- FourOhFour =
[404, {"Content-Type" => "text/html"}, "App tracker doesn't know that path or id"].freeze
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(db) ⇒ TraceApp
constructor
A new instance of TraceApp.
Constructor Details
#initialize(db) ⇒ TraceApp
Returns a new instance of TraceApp.
9 10 11 |
# File 'lib/rack/bug/panels/speedtracer_panel/trace-app.rb', line 9 def initialize(db) @db = db end |
Instance Method Details
#call(env) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/rack/bug/panels/speedtracer_panel/trace-app.rb', line 13 def call(env) Rails.logger.debug{ "#{env['PATH_INFO']} ?= #{TRACER_PATH}" } return FourOhFour unless env['PATH_INFO'].match(TRACER_PATH) resp = Rack::Response.new('', 200) resp['Content-Type'] = CONTENT_TYPE Rails.logger.debug{ env['REQUEST_METHOD'] } case env['REQUEST_METHOD'] when 'HEAD' then # SpeedTracer dispatches HEAD requests to verify the # tracer endpoint when it detects the X-TraceUrl # header for the first time. After the initial load # the verification is cached by the extension. # # By default, we'll return 200. when 'GET' then # GET requests for specific trace are generated by # the extension when the user expands the network # resource tab. Hence, server-side tracer data is # request on-demand, and we need to store it for # some time. # qs = Rack::Utils.parse_query(env['QUERY_STRING']) Rails.logger.debug{ { qs['id'] => @db.keys }.inspect } if qs['id'] && @db[qs['id']] resp.write @db[qs['id']].to_json else # Invalid request or missing request trace id return FourOhFour end else # SpeedTracer should only issue GET & HEAD requests resp.status = 400 end return resp.finish end |