Class: Rack::QueueMetrics::AppTime

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

Instance Method Summary collapse

Methods included from Notify

#notify, #should_notify?

Constructor Details

#initialize(app, logger = nil) ⇒ AppTime

Returns a new instance of AppTime.



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

def initialize(app, logger = nil)
  @app             = app
  @instrument_name = "rack.queue-metrics.app-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
39
40
41
42
43
44
45
# File 'lib/queue-metrics/app_time.rb', line 20

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

  status, headers, response = @app.call(env)

  app_end   = (Time.now.to_f * 1000.0).round
  app_delta = app_end - app_start
  report  = "measure=#{@instrument_name}.end app_end=#{app_end}"
  report << " app_delta=#{app_delta}"
  report << " request_id=#{request_id}" if request_id
  @logger.info report

  notify(:app_end => app_end, :app_start => app_start, :app_delta => app_delta, :middleware_delta => middleware_delta, :request_id => request_id) if should_notify?

  [status, headers, response]
end