1 2 3 4 5 6 7 8 9 10 11 12 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
|
require 'erb'
module Thin
module Stats
# Rack adapter to log stats about a Rack application.
class Adapter
include ERB::Util
def initialize(app, path='/stats')
@app = app
@path = path
@template = ERB.new(File.read(File.dirname(__FILE__) + '/stats.html.erb'))
@requests = 0
@requests_finished = 0
@start_time = Time.now
end
def call(env)
if env['PATH_INFO'].index(@path) == 0
serve(env)
else
log(env) { @app.call(env) }
end
end
def log(env)
@requests += 1
@last_request = Rack::Request.new(env)
request_started_at = Time.now
response = yield
@requests_finished += 1
@last_request_time = Time.now - request_started_at
response
end
def serve(env)
body = @template.result(binding)
[
200,
{ 'Content-Type' => 'text/html' },
[body]
]
end
end
end
end
|