Class: NewRelic::Agent::BeaconConfiguration
- Inherits:
-
Object
- Object
- NewRelic::Agent::BeaconConfiguration
- Defined in:
- lib/new_relic/agent/beacon_configuration.rb
Overview
This class contains the configuration data for setting up RUM headers and footers - acts as a cache of this data so we don’t need to look it up or reconfigure it every request
Constant Summary collapse
- JS_HEADER =
A static javascript header that is identical for every account and application
"<script type=\"text/javascript\">var NREUMQ=NREUMQ||[];NREUMQ.push([\"mark\",\"firstbyte\",new Date().getTime()]);</script>"
Instance Attribute Summary collapse
-
#browser_timing_header ⇒ Object
readonly
the statically generated header - generated when the beacon configuration is created - does not vary per page.
-
#browser_timing_static_footer ⇒ Object
readonly
the static portion of the RUM footer - this part does not vary by which request is in progress.
-
#finish_command ⇒ Object
readonly
RUM footer command used for ‘finish’ - based on whether JSONP is being used.
Instance Method Summary collapse
-
#build_browser_timing_header ⇒ Object
Returns the header string, properly html-safed if needed.
-
#build_load_file_js ⇒ Object
returns a snippet of text that does not change per-transaction.
- #enabled? ⇒ Boolean
-
#initialize ⇒ BeaconConfiguration
constructor
Creates a new browser configuration data.
-
#javascript_header ⇒ Object
returns a copy of the static javascript header, in case people are munging strings somewhere down the line.
-
#license_bytes ⇒ Object
returns a memoized version of the bytes in the license key for obscuring transaction names in the javascript.
Constructor Details
#initialize ⇒ BeaconConfiguration
Creates a new browser configuration data. Argument is a hash of configuration values from the server
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 30 def initialize if Agent.config[:js_errors_beta] && Agent.config[:js_agent_loader] ::NewRelic::Agent.logger.debug("Beta JS errors functionality enabled") ::NewRelic::Agent.logger.debug("JS agent loader version: #{Agent.config[:js_agent_loader_version]}") else @browser_timing_header = build_browser_timing_header ::NewRelic::Agent.logger.debug("Browser timing header: #{@browser_timing_header.inspect}") @browser_timing_static_footer = build_load_file_js ::NewRelic::Agent.logger.debug("Browser timing static footer: #{@browser_timing_static_footer.inspect}") end if Agent.config[:'rum.jsonp'] ::NewRelic::Agent.logger.debug("Real User Monitoring is using JSONP protocol") @finish_command = 'nrfj' else @finish_command = 'nrf2' end if !Agent.config[:'rum.enabled'] ::NewRelic::Agent.logger.debug("Real User Monitoring is disabled for this agent. Edit your configuration to change this.") end end |
Instance Attribute Details
#browser_timing_header ⇒ Object (readonly)
the statically generated header - generated when the beacon configuration is created - does not vary per page
14 15 16 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 14 def browser_timing_header @browser_timing_header end |
#browser_timing_static_footer ⇒ Object (readonly)
the static portion of the RUM footer - this part does not vary by which request is in progress
18 19 20 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 18 def @browser_timing_static_footer end |
#finish_command ⇒ Object (readonly)
RUM footer command used for ‘finish’ - based on whether JSONP is being used. ‘nrfj’ for JSONP, otherwise ‘nrf2’
22 23 24 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 22 def finish_command @finish_command end |
Instance Method Details
#build_browser_timing_header ⇒ Object
Returns the header string, properly html-safed if needed
104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 104 def build_browser_timing_header return "" if !enabled? return "" if Agent.config[:browser_key].nil? value = javascript_header if value.respond_to?(:html_safe) value.html_safe else value end end |
#build_load_file_js ⇒ Object
returns a snippet of text that does not change per-transaction. Is empty when rum is disabled, or we are not including the episodes file dynamically (i.e. the user includes it themselves)
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 71 def build_load_file_js js = <<-EOS if (!NREUMQ.f) { NREUMQ.f=function() { NREUMQ.push(["load",new Date().getTime()]); EOS if Agent.config[:'rum.load_episodes_file'] && Agent.config[:'rum.load_episodes_file'] != '' js << <<-EOS var e=document.createElement("script"); e.type="text/javascript"; e.src=(("http:"===document.location.protocol)?"http:":"https:") + "//" + "#{Agent.config[:episodes_file]}"; document.body.appendChild(e); EOS end js << <<-EOS if(NREUMQ.a)NREUMQ.a(); }; NREUMQ.a=window.onload;window.onload=NREUMQ.f; }; EOS js end |
#enabled? ⇒ Boolean
53 54 55 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 53 def enabled? Agent.config[:'rum.enabled'] && !!Agent.config[:beacon] end |
#javascript_header ⇒ Object
returns a copy of the static javascript header, in case people are munging strings somewhere down the line
99 100 101 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 99 def javascript_header JS_HEADER.dup end |
#license_bytes ⇒ Object
returns a memoized version of the bytes in the license key for obscuring transaction names in the javascript
59 60 61 62 63 64 65 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 59 def license_bytes if @license_bytes.nil? @license_bytes = [] Agent.config[:license_key].each_byte {|byte| @license_bytes << byte} end @license_bytes end |