module RackTimer::Middleware::Borg

Public Class Methods

extended(object) click to toggle source
# File lib/rack-timer/middleware.rb, line 31
def self.extended(object)
  object.singleton_class.class_eval do
    alias_method :call_without_timing, :call
    alias_method :call, :call_with_timing
    public :call
  end

  object.instance_eval do
    _log "assimilating: #{object.class.name}"
    recursive_borg
  end
end

Public Instance Methods

borged?() click to toggle source
# File lib/rack-timer/middleware.rb, line 44
def borged?
  true
end

Private Instance Methods

_current_ticks() click to toggle source
# File lib/rack-timer/middleware.rb, line 84
def _current_ticks
  (Time.now.to_f * 1e6).to_i
end
_log(message) click to toggle source
# File lib/rack-timer/middleware.rb, line 80
def _log(message)
  RackTimer.log "[rack-timer] #{message}"
end
call_with_timing(env) click to toggle source
# File lib/rack-timer/middleware.rb, line 57
def call_with_timing(env)
  time_before = _current_ticks
  result = call_without_timing(env)
  time_delta = _current_ticks - time_before

  if time_inner = env['rack-timer.time']
    time_inner = time_inner.to_i
    time_self = time_delta - time_inner 
  else
    time_self = time_delta
  end
  _log "#{self.class.name} took #{time_self} us"

  if (request_start = env['HTTP_X_REQUEST_START']) && kind_of?(RackTimer::Middleware)
    time_queue_start = request_start.gsub('t=', '').to_i
    time_in_queue = time_before - time_queue_start
    _log "queued for #{time_in_queue} us"
  end

  env['rack-timer.time'] = time_delta
  return result
end
recursive_borg() click to toggle source
# File lib/rack-timer/middleware.rb, line 50
def recursive_borg
  return if @app.nil?
  return if @app.respond_to?(:borged?)
  return unless @app.respond_to?(:call)
  @app.extend(Borg)
end