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 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 30 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
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
98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 98 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)
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 65 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
47 48 49 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 47 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
93 94 95 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 93 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
53 54 55 56 57 58 59 |
# File 'lib/new_relic/agent/beacon_configuration.rb', line 53 def license_bytes if @license_bytes.nil? @license_bytes = [] Agent.config[:license_key].each_byte {|byte| @license_bytes << byte} end @license_bytes end |