Class: Puma::Cluster::WorkerHandle
Relationships & Source Files | |
Inherits: | Object |
Defined in: | lib/puma/cluster/worker_handle.rb |
Overview
This class represents a worker process from the perspective of the puma master process. It contains information about the process and its health and it exposes methods to control the process via IPC. It does not include the actual logic executed by the worker process itself. For that, see Worker
.
Class Method Summary
- .new(idx, pid, phase, options) ⇒ WorkerHandle constructor
Instance Attribute Summary
- #booted? ⇒ Boolean readonly
- #index readonly
- #last_checkin readonly
- #last_status readonly
- #phase rw
- #phase=(value) rw
- #pid rw
- #pid=(value) rw
- #signal readonly
- #started_at readonly
- #term? ⇒ Boolean readonly
Instance Method Summary
- #boot!
- #hup
- #kill
- #ping!(status)
- #ping_timeout
- #term readonly
- #term!
- #uptime
Constructor Details
.new(idx, pid, phase, options) ⇒ WorkerHandle
Instance Attribute Details
#booted? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'lib/puma/cluster/worker_handle.rb', line 30
def booted? @stage == :booted end
#index (readonly)
[ GitHub ]# File 'lib/puma/cluster/worker_handle.rb', line 25
attr_reader :index, :pid, :phase, :signal, :last_checkin, :last_status, :started_at
#last_checkin (readonly)
[ GitHub ]# File 'lib/puma/cluster/worker_handle.rb', line 25
attr_reader :index, :pid, :phase, :signal, :last_checkin, :last_status, :started_at
#last_status (readonly)
[ GitHub ]# File 'lib/puma/cluster/worker_handle.rb', line 25
attr_reader :index, :pid, :phase, :signal, :last_checkin, :last_status, :started_at
#phase (rw)
[ GitHub ]# File 'lib/puma/cluster/worker_handle.rb', line 25
attr_reader :index, :pid, :phase, :signal, :last_checkin, :last_status, :started_at
#phase=(value) (rw)
#pid (rw)
[ GitHub ]# File 'lib/puma/cluster/worker_handle.rb', line 25
attr_reader :index, :pid, :phase, :signal, :last_checkin, :last_status, :started_at
#pid=(value) (rw)
#signal (readonly)
[ GitHub ]# File 'lib/puma/cluster/worker_handle.rb', line 25
attr_reader :index, :pid, :phase, :signal, :last_checkin, :last_status, :started_at
#started_at (readonly)
[ GitHub ]# File 'lib/puma/cluster/worker_handle.rb', line 25
attr_reader :index, :pid, :phase, :signal, :last_checkin, :last_status, :started_at
#term? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'lib/puma/cluster/worker_handle.rb', line 47
def term? @term end
Instance Method Details
#boot!
[ GitHub ]# File 'lib/puma/cluster/worker_handle.rb', line 38
def boot! @last_checkin = Time.now @stage = :booted end
#hup
[ GitHub ]# File 'lib/puma/cluster/worker_handle.rb', line 88
def hup Process.kill "HUP", @pid rescue Errno::ESRCH end
#kill
[ GitHub ]# File 'lib/puma/cluster/worker_handle.rb', line 83
def kill @signal = 'KILL' term end
#ping!(status)
[ GitHub ]# File 'lib/puma/cluster/worker_handle.rb', line 51
def ping!(status) @last_checkin = Time.now captures = status.match(/{ "backlog":(?<backlog>\d*), "running":(?<running>\d*), "pool_capacity":(?<pool_capacity>\d*), "max_threads": (?<max_threads>\d*), "requests_count": (?<requests_count>\d*) }/) @last_status = captures.names.inject({}) do |hash, key| hash[key.to_sym] = captures[key].to_i hash end end
#ping_timeout
# File 'lib/puma/cluster/worker_handle.rb', line 62
def ping_timeout @last_checkin + (booted? ? @options[:worker_timeout] : @options[:worker_boot_timeout] ) end
#term (readonly)
[ GitHub ]# File 'lib/puma/cluster/worker_handle.rb', line 70
def term begin if @first_term_sent && (Time.now - @first_term_sent) > @options[:worker_shutdown_timeout] @signal = "KILL" else @term ||= true @first_term_sent ||= Time.now end Process.kill @signal, @pid if @pid rescue Errno::ESRCH end end
#term!
[ GitHub ]# File 'lib/puma/cluster/worker_handle.rb', line 43
def term! @term = true end
#uptime
[ GitHub ]# File 'lib/puma/cluster/worker_handle.rb', line 34
def uptime Time.now - started_at end