Class: Judoscale::RequestMetrics
- Inherits:
-
Object
- Object
- Judoscale::RequestMetrics
- Defined in:
- lib/judoscale/request_metrics.rb
Constant Summary collapse
- MILLISECONDS_CUTOFF =
Time.new(2000, 1, 1).to_i * 1000
- MICROSECONDS_CUTOFF =
MILLISECONDS_CUTOFF * 1000
- NANOSECONDS_CUTOFF =
MICROSECONDS_CUTOFF * 1000
Instance Attribute Summary collapse
-
#network_time ⇒ Object
readonly
Returns the value of attribute network_time.
-
#request_id ⇒ Object
readonly
Returns the value of attribute request_id.
-
#size ⇒ Object
readonly
Returns the value of attribute size.
Instance Method Summary collapse
- #elapsed_time ⇒ Object
-
#initialize(env, config = Config.instance) ⇒ RequestMetrics
constructor
A new instance of RequestMetrics.
- #queue_time(now = Time.now) ⇒ Object
- #track_queue_time? ⇒ Boolean
Constructor Details
#initialize(env, config = Config.instance) ⇒ RequestMetrics
Returns a new instance of RequestMetrics.
11 12 13 14 15 16 17 |
# File 'lib/judoscale/request_metrics.rb', line 11 def initialize(env, config = Config.instance) @config = config @request_id = env["HTTP_X_REQUEST_ID"] @size = env["rack.input"].respond_to?(:size) ? env["rack.input"].size : 0 @network_time = env["puma.request_body_wait"].to_i @request_start_header = env["HTTP_X_REQUEST_START"] end |
Instance Attribute Details
#network_time ⇒ Object (readonly)
Returns the value of attribute network_time.
9 10 11 |
# File 'lib/judoscale/request_metrics.rb', line 9 def network_time @network_time end |
#request_id ⇒ Object (readonly)
Returns the value of attribute request_id.
9 10 11 |
# File 'lib/judoscale/request_metrics.rb', line 9 def request_id @request_id end |
#size ⇒ Object (readonly)
Returns the value of attribute size.
9 10 11 |
# File 'lib/judoscale/request_metrics.rb', line 9 def size @size end |
Instance Method Details
#elapsed_time ⇒ Object
34 35 36 37 38 39 40 41 |
# File 'lib/judoscale/request_metrics.rb', line 34 def elapsed_time start = Process.clock_gettime(Process::CLOCK_MONOTONIC) response = yield finish = Process.clock_gettime(Process::CLOCK_MONOTONIC) elapsed = ((finish - start) * 1000).to_i [elapsed, response] end |
#queue_time(now = Time.now) ⇒ Object
23 24 25 26 27 28 29 30 31 32 |
# File 'lib/judoscale/request_metrics.rb', line 23 def queue_time(now = Time.now) queue_time = ((now.utc - started_at.utc) * 1000).to_i # Subtract the time Puma spent waiting on the request body, i.e. the network time. It's irrelevant to # capacity-related queue time. Without this, slow clients and large request payloads will skew queue time. queue_time -= network_time # Safeguard against negative queue times (should not happen in practice) (queue_time > 0) ? queue_time : 0 end |
#track_queue_time? ⇒ Boolean
19 20 21 |
# File 'lib/judoscale/request_metrics.rb', line 19 def track_queue_time? @request_start_header && !ignore_large_request? end |