Class: HotThreadsReport
- Inherits:
-
Object
- Object
- HotThreadsReport
- Defined in:
- lib/logstash/api/commands/hot_threads_reporter.rb
Constant Summary collapse
- STRING_SEPARATOR_LENGTH =
80.freeze
- HOT_THREADS_STACK_TRACES_SIZE_DEFAULT =
10.freeze
Instance Method Summary collapse
- #cpu_time(hash) ⇒ Object
- #cpu_time_as_percent(hash) ⇒ Object
-
#initialize(cmd, options) ⇒ HotThreadsReport
constructor
A new instance of HotThreadsReport.
- #to_hash ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(cmd, options) ⇒ HotThreadsReport
Returns a new instance of HotThreadsReport.
8 9 10 11 12 |
# File 'lib/logstash/api/commands/hot_threads_reporter.rb', line 8 def initialize(cmd, ) @cmd = cmd filter = { :stacktrace_size => .fetch(:stacktrace_size, HOT_THREADS_STACK_TRACES_SIZE_DEFAULT) } @thread_dump = ::LogStash::Util::ThreadDump.new(.merge(:dump => ThreadsReport.generate(filter))) end |
Instance Method Details
#cpu_time(hash) ⇒ Object
61 62 63 |
# File 'lib/logstash/api/commands/hot_threads_reporter.rb', line 61 def cpu_time(hash) hash["cpu.time"] / 1000000.0 end |
#cpu_time_as_percent(hash) ⇒ Object
57 58 59 |
# File 'lib/logstash/api/commands/hot_threads_reporter.rb', line 57 def cpu_time_as_percent(hash) (((cpu_time(hash) / @cmd.uptime * 1.0)*10000).to_i)/100.0 end |
#to_hash ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/logstash/api/commands/hot_threads_reporter.rb', line 37 def to_hash hash = { :time => Time.now.iso8601, :busiest_threads => @thread_dump.top_count, :threads => [] } @thread_dump.each do |_hash| thread_name, thread_path = _hash["thread.name"].split(": ") thread = { :name => thread_name, :thread_id => _hash["thread.id"], :percent_of_cpu_time => cpu_time_as_percent(_hash), :state => _hash["thread.state"] } thread[:path] = thread_path if thread_path traces = [] _hash["thread.stacktrace"].each do |trace| traces << trace end thread[:traces] = traces hash[:threads] << thread end { :hot_threads => hash } end |
#to_s ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/logstash/api/commands/hot_threads_reporter.rb', line 14 def to_s hash = to_hash[:hot_threads] report = "#{I18n.t("logstash.web_api.hot_threads.title", :hostname => hash[:hostname], :time => hash[:time], :top_count => @thread_dump.top_count )} \n" report << '=' * STRING_SEPARATOR_LENGTH report << "\n" hash[:threads].each do |thread| line_str = I18n.t("logstash.web_api.hot_threads.thread_title", :percent_of_cpu_time => thread[:percent_of_cpu_time], :thread_state => thread[:state], :thread_name => thread[:name], :thread_id => thread[:thread_id]) thread_report = "#{line_str} \n" thread_report << "#{thread[:path]}\n" if thread[:path] thread[:traces].each do |trace| thread_report << "\t#{trace}\n" end report << thread_report report << '-' * STRING_SEPARATOR_LENGTH report << "\n" end report end |