Class: NewRelic::Agent::Commands::ThreadProfilerSession
- Inherits:
-
Object
- Object
- NewRelic::Agent::Commands::ThreadProfilerSession
- Defined in:
- lib/new_relic/agent/commands/thread_profiler_session.rb
Instance Method Summary collapse
- #enabled? ⇒ Boolean
- #handle_start_command(agent_command) ⇒ Object
- #handle_stop_command(agent_command) ⇒ Object
- #harvest ⇒ Object
-
#initialize(backtrace_service) ⇒ ThreadProfilerSession
constructor
A new instance of ThreadProfilerSession.
- #past_time? ⇒ Boolean
- #ready_to_harvest? ⇒ Boolean
- #running? ⇒ Boolean
- #start(agent_command) ⇒ Object
- #stop(report_data) ⇒ Object
- #stopped? ⇒ Boolean
Constructor Details
#initialize(backtrace_service) ⇒ ThreadProfilerSession
Returns a new instance of ThreadProfilerSession.
13 14 15 16 17 18 |
# File 'lib/new_relic/agent/commands/thread_profiler_session.rb', line 13 def initialize(backtrace_service) @backtrace_service = backtrace_service @started_at = nil @finished_profile = nil @profile = nil end |
Instance Method Details
#enabled? ⇒ Boolean
63 64 65 |
# File 'lib/new_relic/agent/commands/thread_profiler_session.rb', line 63 def enabled? NewRelic::Agent.config[:'thread_profiler.enabled'] end |
#handle_start_command(agent_command) ⇒ Object
20 21 22 23 24 25 |
# 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) ⇒ Object
27 28 29 30 |
# 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 ⇒ Object
52 53 54 55 56 57 58 59 60 61 |
# File 'lib/new_relic/agent/commands/thread_profiler_session.rb', line 52 def harvest NewRelic::Agent.logger.debug( "Harvesting from Thread Profiler #{@finished_profile&.to_log_description}" ) profile = @finished_profile @backtrace_service.profile_agent_code = false @finished_profile = nil @started_at = nil profile end |
#past_time? ⇒ Boolean
75 76 77 78 79 |
# File 'lib/new_relic/agent/commands/thread_profiler_session.rb', line 75 def past_time? @started_at && ( Process.clock_gettime(Process::CLOCK_REALTIME) > @started_at + @duration ) end |
#ready_to_harvest? ⇒ Boolean
71 72 73 |
# File 'lib/new_relic/agent/commands/thread_profiler_session.rb', line 71 def ready_to_harvest? past_time? || stopped? end |
#running? ⇒ Boolean
67 68 69 |
# File 'lib/new_relic/agent/commands/thread_profiler_session.rb', line 67 def running? @backtrace_service.subscribed?(NewRelic::Agent::Threading::BacktraceService::ALL_TRANSACTIONS) end |
#start(agent_command) ⇒ Object
32 33 34 35 36 37 38 39 40 41 |
# 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 = Process.clock_gettime(Process::CLOCK_REALTIME) @duration = profile.duration if profile end |
#stop(report_data) ⇒ Object
43 44 45 46 47 48 49 50 |
# 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? ⇒ Boolean
81 82 83 |
# File 'lib/new_relic/agent/commands/thread_profiler_session.rb', line 81 def stopped? !!@finished_profile end |