class LogrageRailsRequestQueuing::RequestQueueing

Constants

EARLIEST_REQUEST_DATE
REQUEST_START_HEADER

Attributes

queued_ms[R]

How long was the request queued for, in milliseconds

request_queued_raw[R]
request_started_at[R]

Public Class Methods

new(env, request_started_at = Time.zone.now.to_f) click to toggle source
# File lib/lograge_rails_request_queuing/request_queuing.rb, line 12
def initialize(env, request_started_at = Time.zone.now.to_f)
  @request_queued_raw = request_start_header(env)
  @request_started_at = request_started_at
  @queued_ms = calculate_queued_ms
end

Public Instance Methods

request_queued_at() click to toggle source
# File lib/lograge_rails_request_queuing/request_queuing.rb, line 18
def request_queued_at
  return if request_queued_float.blank?
  @request_queued_at ||= begin
    [1000, 1].each do |divisor|
      adjusted = Time.zone.at(request_queued_float / divisor)
      return adjusted if adjusted > EARLIEST_REQUEST_DATE
    end
  end
end

Private Instance Methods

calculate_queued_ms() click to toggle source
# File lib/lograge_rails_request_queuing/request_queuing.rb, line 30
def calculate_queued_ms
  return if request_queued_at.blank?

  waiting_interval_secs = request_started_at - request_queued_at.to_f
  return if waiting_interval_secs < 0 # clocks out of alignment

  waiting_interval_secs * 1000
end
request_queued_float() click to toggle source
# File lib/lograge_rails_request_queuing/request_queuing.rb, line 39
def request_queued_float
  return nil if request_queued_raw.blank?

  # convert values of the form:
  #   "t=1529578997.145"
  #     "1529578997145"
  # to a Float:

  if request_queued_raw =~ /(t=)?([.\d+]+)/
    Float(Regexp.last_match(2))
  end
end
request_start_header(env) click to toggle source
# File lib/lograge_rails_request_queuing/request_queuing.rb, line 52
def request_start_header(env)
  env[REQUEST_START_HEADER]
end