class NewRelic::Agent::Instrumentation::ActionControllerSubscriber
Public Instance Methods
controller_class(payload)
click to toggle source
# File lib/new_relic/agent/instrumentation/action_controller_subscriber.rb, line 80 def controller_class(payload) ::NewRelic::LanguageSupport.constantize(payload[:controller]) end
filtered_params(params)
click to toggle source
# File lib/new_relic/agent/instrumentation/action_controller_subscriber.rb, line 67 def filtered_params(params) NewRelic::Agent::ParameterFiltering.filter_using_rails(params, Rails.application.config.filter_parameters) end
finish(name, id, payload)
click to toggle source
# File lib/new_relic/agent/instrumentation/action_controller_subscriber.rb, line 29 def finish(name, id, payload) # THREAD_LOCAL_ACCESS finishable = pop_segment(id) if state.is_execution_traced? \ && !should_ignore(payload, controller_class(payload)) if exception = exception_object(payload) finishable.notice_error(exception) end finishable.finish else Agent.instance.pop_trace_execution_flag end rescue => e log_notification_error(e, name, 'finish') end
format_metric_name(metric_action, controller)
click to toggle source
# File lib/new_relic/agent/instrumentation/action_controller_subscriber.rb, line 75 def format_metric_name(metric_action, controller) controller_class = controller.is_a?(Class) ? controller : Object.const_get(controller) "Controller/#{controller_class.controller_path}/#{metric_action}" end
ignore?(action, key, controller_class)
click to toggle source
# File lib/new_relic/agent/instrumentation/action_controller_subscriber.rb, line 71 def ignore?(action, key, controller_class) NewRelic::Agent::Instrumentation::IgnoreActions.is_filtered?(key, controller_class, action) end
queue_start(request)
click to toggle source
# File lib/new_relic/agent/instrumentation/action_controller_subscriber.rb, line 92 def queue_start(request) # the following line needs else branch coverage if request && request.respond_to?(:env) # rubocop:disable Style/SafeNavigation QueueTime.parse_frontend_timestamp(request.env, Process.clock_gettime(Process::CLOCK_REALTIME)) end end
request_for_payload(payload)
click to toggle source
# File lib/new_relic/agent/instrumentation/action_controller_subscriber.rb, line 99 def request_for_payload(payload) # @req is a historically stable but not guaranteed Rails header property return unless payload[:headers].instance_variables.include?(:@req) payload[:headers].instance_variable_get(:@req) end
should_ignore(payload, controller_class)
click to toggle source
# File lib/new_relic/agent/instrumentation/action_controller_subscriber.rb, line 84 def should_ignore(payload, controller_class) NewRelic::Agent::Instrumentation::IgnoreActions.is_filtered?( ControllerInstrumentation::NR_DO_NOT_TRACE_KEY, controller_class, payload[:action] ) end
start(name, id, payload)
click to toggle source
# File lib/new_relic/agent/instrumentation/action_controller_subscriber.rb, line 13 def start(name, id, payload) # THREAD_LOCAL_ACCESS controller_class = controller_class(payload) if state.is_execution_traced? && !should_ignore(payload, controller_class) finishable = start_transaction_or_segment(payload, request_for_payload(payload), controller_class) push_segment(id, finishable) else # if this transaction is ignored, make sure child # transaction are also ignored state.current_transaction&.ignore! NewRelic::Agent.instance.push_trace_execution_flag(false) end rescue => e log_notification_error(e, name, 'start') end
start_transaction_or_segment(payload, request, controller_class)
click to toggle source
# File lib/new_relic/agent/instrumentation/action_controller_subscriber.rb, line 47 def start_transaction_or_segment(payload, request, controller_class) Tracer.start_transaction_or_segment( name: format_metric_name(payload[:action], controller_class), category: :controller, options: tracer_options(payload, request, controller_class) ) end
tracer_options(payload, request, controller_class)
click to toggle source
# File lib/new_relic/agent/instrumentation/action_controller_subscriber.rb, line 55 def tracer_options(payload, request, controller_class) { request: request, filtered_params: filtered_params(payload[:params]), apdex_start_time: queue_start(request), ignore_apdex: ignore?(payload[:action], ControllerInstrumentation::NR_IGNORE_APDEX_KEY, controller_class), ignore_enduser: ignore?(payload[:action], ControllerInstrumentation::NR_IGNORE_ENDUSER_KEY, controller_class) }.merge(NewRelic::Agent::MethodTracerHelpers.code_information(controller_class, payload[:action])) end