Module: NetuitiveRailsAgent::RequestDataHook

Includes:
ControllerUtils
Defined in:
lib/netuitive_rails_agent/request_data.rb

Constant Summary collapse

HEADERS_NAMES =
[
  'HTTP_X_REQUEST_START'.freeze,
  'HTTP_X_QUEUE_START'.freeze,
  'HTTP_X_MIDDLEWARE_START'.freeze
].freeze

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ControllerUtils

#netuitive_action_name, #netuitive_controller_name, #netuitive_request_uri

Class Method Details

.header_start_time(headers) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/netuitive_rails_agent/request_data.rb', line 11

def self.header_start_time(headers)
  if headers
    start_time = nil
    HEADERS_NAMES.each do |header_name|
      header = headers[header_name]
      next if header.nil?
      match = /\d+(\.\d{1,2})?/.match(header)
      if match.nil?
        NetuitiveRailsAgent::NetuitiveLogger.log.error "queue time header value #{header} is not recognized"
        next
      end
      header_time = match.to_s.to_f / NetuitiveRailsAgent::ConfigManager.queue_time_divisor
      NetuitiveRailsAgent::NetuitiveLogger.log.debug "queue header_time: #{header_time}"
      start_time = start_time.nil? || header_time < start_time ? header_time : start_time
      NetuitiveRailsAgent::NetuitiveLogger.log.debug "queue start_time: #{start_time}"
    end
    return (Time.now.to_f - start_time) * 1000.0
  end
  nil
end

Instance Method Details

#netuitive_request_hookObject



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/netuitive_rails_agent/request_data.rb', line 32

def netuitive_request_hook
  return unless request
  begin
    queue_time = NetuitiveRailsAgent::RequestDataHook.header_start_time(request.headers)
    NetuitiveRailsAgent::NetuitiveLogger.log.debug "queue_time: #{queue_time}"
    NetuitiveRailsAgent::NetuitiveLogger.log.debug 'sending queue_time metrics'
    NetuitiveRubyAPI.add_sample('action_controller.request.queue_time', queue_time)
    return unless netuitive_controller_name
    NetuitiveRailsAgent::NetuitiveLogger.log.debug "sending queue_time metrics with netuitive_controller_name #{netuitive_controller_name}"
    NetuitiveRubyAPI.add_sample("action_controller.#{netuitive_controller_name}.request.queue_time", queue_time)
    return unless netuitive_action_name
    NetuitiveRailsAgent::NetuitiveLogger.log.debug "sending queue_time metrics with netuitive_action_name #{netuitive_action_name}"
    NetuitiveRubyAPI.add_sample("action_controller.#{netuitive_controller_name}.#{netuitive_action_name}.request.queue_time", queue_time)
  rescue => e
    NetuitiveRailsAgent::NetuitiveLogger.log.error "exception during request tracking: message:#{e.message} backtrace:#{e.backtrace}"
  end
end