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
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 26 def initialize @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}") 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
10 11 12 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 10 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
14 15 16 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 14 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’
18 19 20 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 18 def finish_command @finish_command end |
Instance Method Details
#build_browser_timing_header ⇒ Object
Returns the header string, properly html-safed if needed
94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 94 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)
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 61 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
43 44 45 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 43 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
89 90 91 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 89 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
49 50 51 52 53 54 55 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 49 def license_bytes if @license_bytes.nil? @license_bytes = [] Agent.config[:license_key].each_byte {|byte| @license_bytes << byte} end @license_bytes end |