module TCellAgent::Instrumentation::Rails::JSAgent

Constants

HEAD_SEARCH_REGEX

Public Class Methods

get_handler_and_script_insert(request, response_headers) click to toggle source
# File lib/tcell_agent/rails/js_agent_insert.rb, line 41
def self.get_handler_and_script_insert(request, response_headers)
  js_agent_handler = nil
  script_insert = nil

  TCellAgent::Instrumentation.safe_block('JSAgent get handler and script insert') do
    return [nil, nil] unless (response_headers['Content-Type'] || '').start_with?('text/html')

    js_agent_policy = TCellAgent.policy(TCellAgent::PolicyTypes::JSAGENTINJECTION)
    script_insert = js_agent_policy.get_js_agent_script_tag(
      request.env[TCellAgent::Instrumentation::TCELL_ID]
    )

    return [nil, nil] unless script_insert

    js_agent_handler = proc { |si, resp|
      handle_js_agent_insert(si, resp)
    }
  end

  [js_agent_handler, script_insert]
end
handle_js_agent_insert(script_insert, response) click to toggle source
# File lib/tcell_agent/rails/js_agent_insert.rb, line 29
def self.handle_js_agent_insert(script_insert, response)
  new_response = response
  TCellAgent::Instrumentation.safe_block('Handling JSAgent insert') do
    new_response = response.sub(
      TCellAgent::Instrumentation::Rails::JSAgent::HEAD_SEARCH_REGEX,
      "\\1#{script_insert}"
    )
  end

  new_response
end
insert_now(js_agent_handler, script_insert, rack_body, content_length) click to toggle source
# File lib/tcell_agent/rails/js_agent_insert.rb, line 8
def self.insert_now(js_agent_handler, script_insert, rack_body, content_length)
  TCellAgent::Instrumentation.safe_block('Handling JSAgent Insert Now') do
    if js_agent_handler
      new_content_length = 0
      newbody = []
      rack_body.each do |str|
        modified_str = js_agent_handler.call(script_insert, str)

        newbody << modified_str
        new_content_length += modified_str.bytesize
      end
      rack_body.close if rack_body.respond_to?(:close)

      rack_body = newbody
      content_length = new_content_length
    end
  end

  [rack_body, content_length]
end