class Rack::Latency::Reporter
Public Class Methods
new(app, logger = nil)
click to toggle source
# File lib/rack/latency/reporter.rb, line 7 def initialize(app, logger = nil) @app = app @logger = logger || ::Logger.new($stdout) interval = (Rack::Latency.get_wait).to_i if defined?(Rails) start(interval) if Rack::Latency.get_environments.include?(Rails.env.to_sym) else start(interval) if Rack::Latency.get_environments.include(ENV["RACK_ENV"].to_sym) end end
Public Instance Methods
call(env)
click to toggle source
# File lib/rack/latency/reporter.rb, line 19 def call(env) status, headers, body = @app.call(env) [status, headers, body] end
Private Instance Methods
report(interval)
click to toggle source
# File lib/rack/latency/reporter.rb, line 31 def report(interval) loop do Rack::Latency.measurements.each do |uri, opts| begin start_time = Time.now @size = 0 Net::HTTP.start(uri.host, uri.port) do |http| response = http.send(opts[:method], uri.path) @size = response.length end end_time = Time.now @logger.info "at=info source=#{opts[:name] || uri.host} measure#response.size=#{@size} measure#response.latency=#{"%.2f" % ((end_time - start_time)*1000)}ms" rescue @logger.info "at=error source=#{uri}" end end sleep(interval) end end
start(interval)
click to toggle source
# File lib/rack/latency/reporter.rb, line 26 def start(interval) @logger.info "-> rack-latency starting in interval mode (#{interval}s)" Thread.new { report(interval) } end