Module: NewRelic::Security::Instrumentation::InstrumentationLoader

Extended by:
InstrumentationLoader
Included in:
InstrumentationLoader
Defined in:
lib/newrelic_security/instrumentation-security/instrumentation_loader.rb

Instance Method Summary collapse

Instance Method Details

#add_instrumentationObject



7
8
9
10
11
12
13
14
# File 'lib/newrelic_security/instrumentation-security/instrumentation_loader.rb', line 7

def add_instrumentation()
  res = ::NewRelic::Agent.add_instrumentation("#{__dir__}/**/instrumentation.rb")
  NewRelic::Security::Agent.logger.debug "res, res.class #{res.class} #{res.inspect}"
  NewRelic::Security::Agent.logger.debug "Logger print from add instrumentation api."
  NewRelic::Security::Agent.logger.debug "Agent.agent : #{NewRelic::Security::Agent.agent.inspect}"
  NewRelic::Security::Agent.logger.debug "Agent.config : #{NewRelic::Security::Agent::Utils.filtered_log(NewRelic::Security::Agent.config.inspect)}"
  NewRelic::Security::Agent.init_logger.info "[STEP-6] => Application instrumentation applied successfully"
end

#chain_instrument(target_class, instrumenting_module, supportability_name = nil) ⇒ Object



42
43
44
45
46
# File 'lib/newrelic_security/instrumentation-security/instrumentation_loader.rb', line 42

def chain_instrument(target_class, instrumenting_module, supportability_name = nil)
  log_and_instrument('MethodChaining', target_class, instrumenting_module, supportability_name) do
    instrumenting_module.instrument!
  end
end

#install_instrumentation(supportability_name, target_class, instrumenting_module) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/newrelic_security/instrumentation-security/instrumentation_loader.rb', line 16

def install_instrumentation(supportability_name, target_class, instrumenting_module)
  s_name = "instrumentation.#{supportability_name}".to_sym
  if ::NewRelic::Agent.config[s_name] == :disabled || ::NewRelic::Agent.config[s_name] == 'disabled'
    NewRelic::Security::Agent.logger.info "Skipping New Relic supported #{target_class} instrumentation, as #{s_name} is #{::NewRelic::Agent.config[s_name]}"
    NewRelic::Security::Agent.init_logger.info "Skipping New Relic supported #{target_class} instrumentation, as #{s_name} is #{::NewRelic::Agent.config[s_name]}"
  elsif ::NewRelic::Agent.config[s_name] == :chain || ::NewRelic::Agent.config[s_name] == 'chain'
    NewRelic::Security::Instrumentation::InstrumentationLoader.chain_instrument target_class, Object.const_get("#{instrumenting_module}::Chain")
  else
    NewRelic::Security::Instrumentation::InstrumentationLoader.prepend_instrument target_class, Object.const_get("#{instrumenting_module}::Prepend")
  end
end

#log_and_instrument(method, target_class, instrumenting_module, supportability_name) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/newrelic_security/instrumentation-security/instrumentation_loader.rb', line 28

def log_and_instrument(method, target_class, instrumenting_module, supportability_name)
  # supportability_name ||= extract_supportability_name(instrumenting_module)
  NewRelic::Security::Agent.logger.info "Installing New Relic supported #{target_class} instrumentation using #{method}"
  NewRelic::Security::Agent.logger.info "Supportability/Instrumentation/#{target_class}/#{method}"
  NewRelic::Security::Agent.init_logger.info "Installing New Relic supported #{target_class} instrumentation using #{method}"
  yield
end

#prepend_instrument(target_class, instrumenting_module, supportability_name = nil) ⇒ Object



36
37
38
39
40
# File 'lib/newrelic_security/instrumentation-security/instrumentation_loader.rb', line 36

def prepend_instrument(target_class, instrumenting_module, supportability_name = nil)
  log_and_instrument('Prepend', target_class, instrumenting_module, supportability_name) do
    target_class.send(:prepend, instrumenting_module)
  end
end