17
18
19
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
46
47
48
49
50
51
52
|
# File 'lib/judoscale/request_middleware.rb', line 17
def call(env)
tracker = UtilizationTracker.instance
tracker.start!
tracker.incr
request_metrics = RequestMetrics.new(env)
store = MetricsStore.instance
time = Time.now.utc
if request_metrics.track_queue_time?
queue_time = request_metrics.queue_time(time)
network_time = request_metrics.network_time
env["judoscale.queue_time"] = queue_time
store.push :qt, queue_time, time
unless network_time.zero?
env["judoscale.network_time"] = network_time
store.push :nt, network_time, time
end
logger.debug "Request queue_time=#{queue_time}ms network_time=#{network_time}ms request_id=#{request_metrics.request_id} size=#{request_metrics.size}"
end
Reporter.start
app_time, response = request_metrics.elapsed_time do
@app.call(env)
end
store.push :at, app_time, time
response
ensure
tracker.decr
end
|