Class: Puma::Cluster::WorkerHandle

Inherits:
Object
  • Object
show all
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 Puma::Cluster::Worker.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(idx, pid, phase, options) ⇒ WorkerHandle

Returns a new instance of WorkerHandle.



11
12
13
14
15
16
17
18
19
20
21
22
23
# 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

#indexObject (readonly)

Returns the value of attribute index.



25
26
27
# File 'lib/puma/cluster/worker_handle.rb', line 25

def index
  @index
end

#last_checkinObject (readonly)

Returns the value of attribute last_checkin.



25
26
27
# File 'lib/puma/cluster/worker_handle.rb', line 25

def last_checkin
  @last_checkin
end

#last_statusObject (readonly)

Returns the value of attribute last_status.



25
26
27
# File 'lib/puma/cluster/worker_handle.rb', line 25

def last_status
  @last_status
end

#phaseObject

Returns the value of attribute phase.



25
26
27
# File 'lib/puma/cluster/worker_handle.rb', line 25

def phase
  @phase
end

#pidObject

Returns the value of attribute pid.



25
26
27
# File 'lib/puma/cluster/worker_handle.rb', line 25

def pid
  @pid
end

#signalObject (readonly)

Returns the value of attribute signal.



25
26
27
# File 'lib/puma/cluster/worker_handle.rb', line 25

def signal
  @signal
end

#started_atObject (readonly)

Returns the value of attribute started_at.



25
26
27
# File 'lib/puma/cluster/worker_handle.rb', line 25

def started_at
  @started_at
end

Instance Method Details

#boot!Object



34
35
36
37
# File 'lib/puma/cluster/worker_handle.rb', line 34

def boot!
  @last_checkin = Time.now
  @stage = :booted
end

#booted?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'lib/puma/cluster/worker_handle.rb', line 30

def booted?
  @stage == :booted
end

#hupObject



80
81
82
83
# File 'lib/puma/cluster/worker_handle.rb', line 80

def hup
  Process.kill "HUP", @pid
rescue Errno::ESRCH
end

#killObject



75
76
77
78
# File 'lib/puma/cluster/worker_handle.rb', line 75

def kill
  @signal = 'KILL'
  term
end

#ping!(status) ⇒ Object



43
44
45
46
47
48
49
50
# File 'lib/puma/cluster/worker_handle.rb', line 43

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_timeoutObject

See Also:

Version:

  • 5.0.0



54
55
56
57
58
59
60
# File 'lib/puma/cluster/worker_handle.rb', line 54

def ping_timeout
  @last_checkin +
    (booted? ?
      @options[:worker_timeout] :
      @options[:worker_boot_timeout]
    )
end

#termObject



62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/puma/cluster/worker_handle.rb', line 62

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?Boolean

Returns:

  • (Boolean)


39
40
41
# File 'lib/puma/cluster/worker_handle.rb', line 39

def term?
  @term
end