Module: OpenTelemetry::Adapters::Rack::Util::QueueTime
- Defined in:
- lib/opentelemetry/adapters/rack/util/queue_time.rb
Overview
QueueTime simply…
Constant Summary collapse
- REQUEST_START =
'HTTP_X_REQUEST_START'
- QUEUE_START =
'HTTP_X_QUEUE_START'
- MINIMUM_ACCEPTABLE_TIME_VALUE =
1_000_000_000
Class Method Summary collapse
-
.get_request_start(env, now = nil) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity.
Class Method Details
.get_request_start(env, now = nil) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
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 |
# File 'lib/opentelemetry/adapters/rack/util/queue_time.rb', line 19 def get_request_start(env, now = nil) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity header = env[REQUEST_START] || env[QUEUE_START] return unless header # nginx header is seconds in the format "t=1512379167.574" # apache header is microseconds in the format "t=1570633834463123" # heroku header is milliseconds in the format "1570634024294" time_string = header.to_s.delete('^0-9') return if time_string.nil? # Return nil if the time is clearly invalid time_value = "#{time_string[0, 10]}.#{time_string[10, 6]}".to_f return if time_value.zero? || time_value < MINIMUM_ACCEPTABLE_TIME_VALUE # return the request_start only if it's lesser than # current time, to avoid significant clock skew request_start = Time.at(time_value) now ||= Time.now.utc request_start.utc > now ? nil : request_start rescue StandardError => e # in case of an Exception we don't create a # `request.queuing` span OpenTelemetry.logger.debug("[rack] unable to parse request queue headers: #{e}") nil end |