Packages
verk
1.4.1
1.7.3
1.7.2
1.7.1
1.7.0
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.0
1.4.1
1.4.0
1.3.0
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.1
1.1.0
1.0.2
1.0.1
1.0.0
0.14.1
0.14.0
0.13.6
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.0
0.9.13
0.9.12
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
Verk is a job processing system backed by Redis.
Current section
Files
Jump to
Current section
Files
lib/verk/queue_supervisor.ex
defmodule Verk.Queue.Supervisor do
@moduledoc """
Supervisor definition for a queue. It consists of:
* A `Verk.QueueManager`
* A poolboy pool of workers
* A `Verk.WorkersManager`
"""
use Supervisor
alias Verk.{WorkersManager, QueueManager}
@doc false
def start_link(name, size) do
Supervisor.start_link(__MODULE__, [name, size], name: name(name))
end
@doc false
def init([name, size]) do
pool_name = String.to_atom("#{name}.pool")
workers_manager = WorkersManager.name(name)
queue_manager = QueueManager.name(name)
children = [worker(QueueManager, [queue_manager, name], id: queue_manager),
poolboy_spec(pool_name, size),
worker(WorkersManager, [workers_manager, name, queue_manager, pool_name, size], id: workers_manager)]
supervise(children, strategy: :one_for_one)
end
defp poolboy_spec(pool_name, pool_size) do
args = [[name: {:local, pool_name}, worker_module: Verk.Worker, size: pool_size, max_overflow: 0], []]
worker(:poolboy, args, restart: :permanent, shutdown: 5000, id: pool_name)
end
@doc false
def name(queue) do
String.to_atom("#{queue}.supervisor")
end
@doc false
def child_spec(queue, size) when is_atom(queue) do
supervisor(Verk.Queue.Supervisor, [queue, size], id: name(queue))
end
end