class OneApm::Collector::Commands::ThreadProfilerSession
Public Class Methods
new(backtrace_service)
click to toggle source
# File lib/one_apm/collector/commands/thread_profiler_session.rb, line 13 def initialize(backtrace_service) @backtrace_service = backtrace_service end
Public Instance Methods
enabled?()
click to toggle source
# File lib/one_apm/collector/commands/thread_profiler_session.rb, line 57 def enabled? OneApm::Manager.config[:'thread_profiler.enabled'] end
handle_start_command(agent_command)
click to toggle source
# File lib/one_apm/collector/commands/thread_profiler_session.rb, line 17 def handle_start_command(agent_command) raise_unsupported_error unless OneApm::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/one_apm/collector/commands/thread_profiler_session.rb, line 24 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/one_apm/collector/commands/thread_profiler_session.rb, line 48 def harvest OneApm::Manager.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/one_apm/collector/commands/thread_profiler_session.rb, line 69 def past_time? @started_at && (Time.now > @started_at + @duration) end
ready_to_harvest?()
click to toggle source
# File lib/one_apm/collector/commands/thread_profiler_session.rb, line 65 def ready_to_harvest? past_time? || stopped? end
running?()
click to toggle source
# File lib/one_apm/collector/commands/thread_profiler_session.rb, line 61 def running? @backtrace_service.subscribed?(OneApm::Agent::Threading::BacktraceService::OA_ALL_TRANSACTIONS) end
start(agent_command)
click to toggle source
# File lib/one_apm/collector/commands/thread_profiler_session.rb, line 29 def start(agent_command) OneApm::Manager.logger.debug("Starting Thread Profiler.") profile = @backtrace_service.subscribe( OneApm::Agent::Threading::BacktraceService::OA_ALL_TRANSACTIONS, agent_command.arguments ) @started_at = Time.now @duration = profile.duration if profile end
stop(report_data)
click to toggle source
# File lib/one_apm/collector/commands/thread_profiler_session.rb, line 40 def stop(report_data) return unless running? OneApm::Manager.logger.debug("Stopping Thread Profiler.") @finished_profile = @backtrace_service.harvest(OneApm::Agent::Threading::BacktraceService::OA_ALL_TRANSACTIONS) @backtrace_service.unsubscribe(OneApm::Agent::Threading::BacktraceService::OA_ALL_TRANSACTIONS) @finished_profile = nil if !report_data end
stopped?()
click to toggle source
# File lib/one_apm/collector/commands/thread_profiler_session.rb, line 73 def stopped? !!@finished_profile end
Private Instance Methods
raise_already_started_error()
click to toggle source
# File lib/one_apm/collector/commands/thread_profiler_session.rb, line 100 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/one_apm/collector/commands/thread_profiler_session.rb, line 79 def raise_command_error(msg) raise OneApm::Collector::AgentCommandRouter::AgentCommandError.new(msg) end
raise_thread_profiler_disabled()
click to toggle source
# File lib/one_apm/collector/commands/thread_profiler_session.rb, line 95 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/one_apm/collector/commands/thread_profiler_session.rb, line 83 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