class NewRelic::Agent::Commands::ThreadProfilerSession
Public Class Methods
new(backtrace_service)
click to toggle source
# File lib/new_relic/agent/commands/thread_profiler_session.rb, line 14 def initialize(backtrace_service) @backtrace_service = backtrace_service @started_at = nil @finished_profile = nil end
Public Instance Methods
enabled?()
click to toggle source
# File lib/new_relic/agent/commands/thread_profiler_session.rb, line 60 def enabled? NewRelic::Agent.config[:'thread_profiler.enabled'] end
handle_start_command(agent_command)
click to toggle source
# File lib/new_relic/agent/commands/thread_profiler_session.rb, line 20 def handle_start_command(agent_command) raise_unsupported_error unless NewRelic::Agent::Threading::BacktraceService.is_supported? raise_thread_profiler_disabled unless enabled? raise_already_started_error if running? start(agent_command) end
handle_stop_command(agent_command)
click to toggle source
# File lib/new_relic/agent/commands/thread_profiler_session.rb, line 27 def handle_stop_command(agent_command) report_data = agent_command.arguments.fetch("report_data", true) stop(report_data) end
harvest()
click to toggle source
# File lib/new_relic/agent/commands/thread_profiler_session.rb, line 51 def harvest NewRelic::Agent.logger.debug("Harvesting from Thread Profiler #{@finished_profile.to_log_description unless @finished_profile.nil?}") profile = @finished_profile @backtrace_service.profile_agent_code = false @finished_profile = nil @started_at = nil profile end
past_time?()
click to toggle source
# File lib/new_relic/agent/commands/thread_profiler_session.rb, line 72 def past_time? @started_at && (Time.now > @started_at + @duration) end
ready_to_harvest?()
click to toggle source
# File lib/new_relic/agent/commands/thread_profiler_session.rb, line 68 def ready_to_harvest? past_time? || stopped? end
running?()
click to toggle source
# File lib/new_relic/agent/commands/thread_profiler_session.rb, line 64 def running? @backtrace_service.subscribed?(NewRelic::Agent::Threading::BacktraceService::ALL_TRANSACTIONS) end
start(agent_command)
click to toggle source
# File lib/new_relic/agent/commands/thread_profiler_session.rb, line 32 def start(agent_command) NewRelic::Agent.logger.debug("Starting Thread Profiler.") profile = @backtrace_service.subscribe( NewRelic::Agent::Threading::BacktraceService::ALL_TRANSACTIONS, agent_command.arguments ) @started_at = Time.now @duration = profile.duration if profile end
stop(report_data)
click to toggle source
# File lib/new_relic/agent/commands/thread_profiler_session.rb, line 43 def stop(report_data) return unless running? NewRelic::Agent.logger.debug("Stopping Thread Profiler.") @finished_profile = @backtrace_service.harvest(NewRelic::Agent::Threading::BacktraceService::ALL_TRANSACTIONS) @backtrace_service.unsubscribe(NewRelic::Agent::Threading::BacktraceService::ALL_TRANSACTIONS) @finished_profile = nil if !report_data end
stopped?()
click to toggle source
# File lib/new_relic/agent/commands/thread_profiler_session.rb, line 76 def stopped? !!@finished_profile end
Private Instance Methods
raise_already_started_error()
click to toggle source
# File lib/new_relic/agent/commands/thread_profiler_session.rb, line 103 def raise_already_started_error msg = "Profile already in progress. Ignoring agent command to start another." raise_command_error(msg) end
raise_command_error(msg)
click to toggle source
# File lib/new_relic/agent/commands/thread_profiler_session.rb, line 82 def raise_command_error(msg) raise NewRelic::Agent::Commands::AgentCommandRouter::AgentCommandError.new(msg) end
raise_thread_profiler_disabled()
click to toggle source
# File lib/new_relic/agent/commands/thread_profiler_session.rb, line 98 def raise_thread_profiler_disabled msg = "Not starting Thread Profiler because of config 'thread_profiler.enabled' = #{enabled?}" raise_command_error(msg) end
raise_unsupported_error()
click to toggle source
# File lib/new_relic/agent/commands/thread_profiler_session.rb, line 86 def raise_unsupported_error msg = <<-EOF Thread profiling is only supported on 1.9.2 and greater versions of Ruby. We detected running agents capable of profiling, but the profile started with an agent running Ruby #{RUBY_VERSION}. Profiling again might select an appropriate agent, but we recommend running a consistent version of Ruby across your application for better results. EOF raise_command_error(msg) end