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