Class: DelayedJobWorkerPool::Registry

Inherits:
Object
  • Object
show all
Defined in:
lib/delayed_job_worker_pool/registry.rb

Overview

Keeps track of worker groups and their workers.

Defined Under Namespace

Classes: GroupAlreadyExists, GroupDoesNotExist, GroupNotFound

Instance Method Summary collapse

Constructor Details

#initializeRegistry

Returns a new instance of Registry.



10
11
12
# File 'lib/delayed_job_worker_pool/registry.rb', line 10

def initialize
  @groups = {}
end

Instance Method Details

#add_group(name, options) ⇒ Object

Raises:



22
23
24
25
26
27
28
29
# File 'lib/delayed_job_worker_pool/registry.rb', line 22

def add_group(name, options)
  raise GroupAlreadyExists.new("Group #{group} already exists") if @groups.key?(name)

  @groups[name] = {
    options: options,
    pids: []
  }
end

#add_worker(group_name, pid) ⇒ Object



31
32
33
# File 'lib/delayed_job_worker_pool/registry.rb', line 31

def add_worker(group_name, pid)
  group_by_name(group_name)[:pids] << pid
end

#group(pid) ⇒ Object

Raises:



47
48
49
50
51
52
# File 'lib/delayed_job_worker_pool/registry.rb', line 47

def group(pid)
  @groups.each do |name, group|
    return name if group[:pids].include?(pid)
  end
  raise GroupNotFound.new("No group found for PID #{pid}")
end

#include_worker?(pid) ⇒ Boolean

Returns:

  • (Boolean)


14
15
16
# File 'lib/delayed_job_worker_pool/registry.rb', line 14

def include_worker?(pid)
  worker_pids.include?(pid)
end

#options(group_name) ⇒ Object



39
40
41
# File 'lib/delayed_job_worker_pool/registry.rb', line 39

def options(group_name)
  group_by_name(group_name)[:options]
end

#remove_worker(pid) ⇒ Object



35
36
37
# File 'lib/delayed_job_worker_pool/registry.rb', line 35

def remove_worker(pid)
  @groups[group(pid)][:pids].delete(pid)
end

#worker_pidsObject



43
44
45
# File 'lib/delayed_job_worker_pool/registry.rb', line 43

def worker_pids
  @groups.values.flat_map { |v| v[:pids] }
end

#workers?Boolean

Returns:

  • (Boolean)


18
19
20
# File 'lib/delayed_job_worker_pool/registry.rb', line 18

def workers?
  !worker_pids.empty?
end