Class: Rack::QueueMetrics::QueueTime

Inherits:
Object
  • Object
show all
Includes:
Notify
Defined in:
lib/queue-metrics/queue_time.rb

Instance Method Summary collapse

Methods included from Notify

#notify, #should_notify?

Constructor Details

#initialize(app, logger = nil) ⇒ QueueTime

Returns a new instance of QueueTime.



10
11
12
13
14
15
16
17
18
# File 'lib/queue-metrics/queue_time.rb', line 10

def initialize(app, logger = nil)
  @app             = app
  @instrument_name = "rack.queue-metrics.queue-time"
  @logger          = logger
  if @logger.nil?
    @logger = ::Logger.new($stdout)
    @logger.formatter = L2MetFormatter.new
  end
end

Instance Method Details

#call(env) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/queue-metrics/queue_time.rb', line 20

def call(env)
  middleware_start    = (Time.now.to_f * 1000.0).round
  request_start       = (env["HTTP_X_REQUEST_START"] || 0).to_i
  request_id          = env["HTTP_REQUEST_ID"]
  request_start_delta = nil
  report = "measure=#{@instrument_name} middleware_start=#{middleware_start}"
  if request_start > 0
    request_start_delta = middleware_start - request_start
    report << " request_start=#{request_start} request_start_delta=#{request_start_delta}"
  end
  report << " request_id=#{request_id}" if request_id
  @logger.info report

  notify(:middleware_start => middleware_start, :request_start => request_start, :request_start_delta => request_start_delta, :request_id => request_id) if should_notify?

  env["MIDDLEWARE_START"] = middleware_start

  @app.call(env)
end