def autoinstrument_source(response, headers, js_to_inject)
source = gather_source(response)
close_old_response(response)
return nil unless source
beginning_of_source = source[0..SCAN_LIMIT]
if body_start = find_body_start(beginning_of_source)
meta_tag_positions = [
find_x_ua_compatible_position(beginning_of_source),
find_charset_position(beginning_of_source)
].compact
if !meta_tag_positions.empty?
insertion_index = meta_tag_positions.max
else
insertion_index = find_end_of_head_open(beginning_of_source) || body_start
end
if insertion_index
source = source[0...insertion_index] <<
js_to_inject <<
source[insertion_index..-1]
else
NewRelic::Agent.logger.debug "Skipping RUM instrumentation. Could not properly determine location to inject script."
end
else
msg = "Skipping RUM instrumentation. Unable to find <body> tag in first #{SCAN_LIMIT} bytes of document."
NewRelic::Agent.logger.log_once(:warn, :rum_insertion_failure, msg)
NewRelic::Agent.logger.debug(msg)
end
source
rescue => e
NewRelic::Agent.logger.debug "Skipping RUM instrumentation on exception.", e
nil
end