123456789_123456789_123456789_123456789_123456789_

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

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(idx, pid, phase, options) ⇒ WorkerHandle

[ GitHub ]

  
# File 'lib/puma/cluster/worker_handle.rb', line 11

def initialize(idx, pid, phase, options)
  @index = idx
  @pid = pid
  @phase = phase
  @stage = :started
  @signal = "TERM"
  @options = options
  @first_term_sent = nil
  @started_at = Time.now
  @last_checkin = Time.now
  @last_status = {}
  @term = false
end

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)

Version:

  • 5.0.0

[ GitHub ]

  
# File 'lib/puma/cluster/worker_handle.rb', line 28

attr_writer :pid, :phase

#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)

Version:

  • 5.0.0

[ GitHub ]

  
# File 'lib/puma/cluster/worker_handle.rb', line 28

attr_writer :pid, :phase

#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

See Also:

Version:

  • 5.0.0

[ GitHub ]

  
# 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