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



61
62
63
64
65
66
67
68
69
70
# File 'lib/ting_yun/instrumentation/support/javascript_instrumentor.rb', line 61

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



43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/ting_yun/instrumentation/support/javascript_instrumentor.rb', line 43

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
    }
    data
end

.browser_timing_headerObject

THREAD_LOCAL_ACCESS



13
14
15
16
17
18
19
20
21
22
# File 'lib/ting_yun/instrumentation/support/javascript_instrumentor.rb', line 13

def browser_timing_header #THREAD_LOCAL_ACCESS
  state = TingYun::Agent::TransactionState.tl_get
  return '' unless insert_js?(state)
  bt_config = TingYun::Support::Serialize::JSONWrapper.dump(browser_timing_config(state))
  return '' if bt_config.empty?
  html_safe_if_needed("<script>#{browser_instrument("ty_rum.agent=#{bt_config}")}</script>")
rescue => e
  ::TingYun::Agent.logger.debug "Failure during RUM browser_timing_header construction", e
  ''
end

.find_brace_endObject



72
73
74
75
76
# File 'lib/ting_yun/instrumentation/support/javascript_instrumentor.rb', line 72

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



56
57
58
59
# File 'lib/ting_yun/instrumentation/support/javascript_instrumentor.rb', line 56

def html_safe_if_needed(string)
  string = string.html_safe if string.respond_to?(:html_safe)
  string
end

.insert_js?(state) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/ting_yun/instrumentation/support/javascript_instrumentor.rb', line 28

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)


24
25
26
# File 'lib/ting_yun/instrumentation/support/javascript_instrumentor.rb', line 24

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