Module: TingYun::Instrumentation::Support::JavascriptInstrument

Defined in:
lib/ting_yun/instrumentation/support/javascript_instrumentor.rb

Constant Summary collapse

GT =
"}".freeze

Class Method Summary collapse

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_headerObject

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_endObject



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

Returns:

  • (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

.rum_enable?Boolean

Returns:

  • (Boolean)


33
34
35
# File 'lib/ting_yun/instrumentation/support/javascript_instrumentor.rb', line 33

def rum_enable?
   TingYun::Agent.config[:'nbs.rum.enabled']
end