class Barnes::Instruments::PumaInstrument::StatValue
This class is responsible for consuming a puma generated stats hash that can come in two “flavors” one is a “single process” server which will look like this:
{ "backlog": 0, "running": 0, "pool_capacity": 16 }
The other is a multiple cluster server that will look like this:
{"workers"=>2, "phase"=>0, "booted_workers"=>2, "old_workers"=>0, "worker_status"=>[{"pid"=>35020, "index"=>0, "phase"=>0, "booted"=>true, "last_checkin"=>"2018-05-21T19:53:18Z", "last_status"=>{"backlog"=>0, "running"=>5, "pool_capacity"=>5}}, {"pid"=>35021, "index"=>1, "phase"=>0, "booted"=>true, "last_checkin"=>"2018-05-21T19:53:18Z", "last_status"=>{"backlog"=>0, "running"=>5, "pool_capacity"=>5}}]}
Attributes
key[R]
stats[R]
Public Class Methods
new(stats, key)
click to toggle source
# File lib/barnes/instruments/puma_stats_value.rb, line 17 def initialize(stats, key) @stats = stats @key = key @cluster = stats.key?("worker_status") end
Public Instance Methods
cluster?()
click to toggle source
# File lib/barnes/instruments/puma_stats_value.rb, line 27 def cluster? @cluster end
single?()
click to toggle source
# File lib/barnes/instruments/puma_stats_value.rb, line 23 def single? !cluster? end
value()
click to toggle source
For single worker process use value directly for multiple workers use the sum.
github.com/puma/puma/pull/1532
# File lib/barnes/instruments/puma_stats_value.rb, line 35 def value return stats[key] if single? first_worker = stats["worker_status"].first return nil unless first_worker && first_worker["last_status"].key?(key) value = 0 stats["worker_status"].each do |worker_status| value += worker_status["last_status"][key] || 0 end return value end