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



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

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



84
85
86
87
# File 'lib/puma/cluster/worker_handle.rb', line 84

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

#killObject



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

def kill
  @signal = 'KILL'
  term
end

#ping!(status) ⇒ Object



47
48
49
50
51
52
53
54
# File 'lib/puma/cluster/worker_handle.rb', line 47

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



58
59
60
61
62
63
64
# File 'lib/puma/cluster/worker_handle.rb', line 58

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

#termObject



66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/puma/cluster/worker_handle.rb', line 66

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)


43
44
45
# File 'lib/puma/cluster/worker_handle.rb', line 43

def term?
  @term
end

#uptimeObject



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

def uptime
  Time.now - started_at
end