Module: TingYun::Instrumentation::Support::JavascriptInstrument
- Defined in:
- lib/ting_yun/instrumentation/support/javascript_instrumentor.rb
Constant Summary collapse
- GT =
"}".freeze
Class Method Summary collapse
- .browser_instrument(js) ⇒ Object
- .browser_timing_config(state) ⇒ Object
-
.browser_timing_header ⇒ Object
THREAD_LOCAL_ACCESS.
- .find_brace_end ⇒ Object
- .html_safe_if_needed(string) ⇒ Object
- .insert_js?(state) ⇒ Boolean
- .rum_enable? ⇒ Boolean
Class Method Details
.browser_instrument(js) ⇒ Object
70 71 72 73 74 75 76 77 78 79 |
# File 'lib/ting_yun/instrumentation/support/javascript_instrumentor.rb', line 70 def browser_instrument(js) script = TingYun::Agent.config[:'nbs.rum.script'] last_brace = script.rindex(GT) if script if last_brace script = script[0..last_brace-1] << js << script[last_brace..-1] end script end |
.browser_timing_config(state) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/ting_yun/instrumentation/support/javascript_instrumentor.rb', line 52 def browser_timing_config(state) timings = state.timings data = { :id => TingYun::Agent.config[:tingyunIdSecret], :n => state.transaction_name , :a => timings.app_time_in_millis, :q => timings.queue_time_in_millis, :tid => state.trace_id } TingYun::Support::Serialize::JSONWrapper.dump(data) end |
.browser_timing_header ⇒ Object
THREAD_LOCAL_ACCESS
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/ting_yun/instrumentation/support/javascript_instrumentor.rb', line 13 def browser_timing_header #THREAD_LOCAL_ACCESS return '' unless rum_enable? # unsupport insert script state = TingYun::Agent::TransactionState.tl_get return '' unless insert_js?(state) bt_config = browser_timing_config(state) return '' if bt_config.empty? if TingYun::Agent.config[:'nbs.rum.mix_enabled'] html_safe_if_needed("<script>(function(w){(w._ty_rum || (w._ty_rum = {})).agent = #{bt_config};})(window);</script>") else html_safe_if_needed("<script>#{browser_instrument("ty_rum.agent=#{bt_config}")}</script>") end rescue => e ::TingYun::Agent.logger.debug "Failure during RUM browser_timing_header construction", e '' end |
.find_brace_end ⇒ Object
81 82 83 84 85 |
# File 'lib/ting_yun/instrumentation/support/javascript_instrumentor.rb', line 81 def find_brace_end script = TingYun::Agent.config[:'nbs.rum.script'] last_brace = script.rindex(GT) if script last_brace end |
.html_safe_if_needed(string) ⇒ Object
65 66 67 68 |
# File 'lib/ting_yun/instrumentation/support/javascript_instrumentor.rb', line 65 def html_safe_if_needed(string) string = string.html_safe if string.respond_to?(:html_safe) string end |
.insert_js?(state) ⇒ Boolean
37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/ting_yun/instrumentation/support/javascript_instrumentor.rb', line 37 def insert_js?(state) if !state.current_transaction ::TingYun::Agent.logger.debug "Not in transaction. Skipping browser instrumentation." false elsif !state.transaction_traced? ::TingYun::Agent.logger.debug "Transaction is not traced. Skipping browser instrumentation." false elsif !state.execution_traced? ::TingYun::Agent.logger.debug "Execution is not traced. Skipping browser instrumentation." false else true end end |