Packages
verk
0.9.12
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/supervisor.ex
defmodule Verk.Supervisor do
use Supervisor
@doc false
def start_link do
Supervisor.start_link(__MODULE__, [], name: __MODULE__)
end
@doc false
def init(_) do
queues = Application.get_env(:verk, :queues, [])
children = for { queue, size } <- queues, do: queue_child(queue, size)
{ :ok, redis_url } = Application.fetch_env(:verk, :redis_url)
schedule_manager = worker(Verk.ScheduleManager, [], id: :schedule_manager)
verk_event_manager = worker(GenEvent, [[name: Verk.EventManager]])
queue_stats_watcher = worker(Watcher, [Verk.EventManager, Verk.QueueStats, []])
redis = worker(Redix, [redis_url, [name: Verk.Redis]])
children = [redis, verk_event_manager, queue_stats_watcher, schedule_manager] ++ children
supervise(children, strategy: :one_for_one)
end
@doc false
def start_child(queue, size \\ 25) when is_atom(queue) and size > 0 do
Supervisor.start_child(__MODULE__, queue_child(queue, size))
end
@doc false
def stop_child(queue) when is_atom(queue) do
supervisor_name = supervisor_name(queue)
case Supervisor.terminate_child(__MODULE__, supervisor_name) do
:ok -> Supervisor.delete_child(__MODULE__, supervisor_name)
error = { :error, :not_found } -> error
end
end
defp queue_child(queue, size) when is_atom(queue) do
supervisor(Verk.Queue.Supervisor, [queue, size], id: supervisor_name(queue))
end
defp supervisor_name(queue) do
String.to_atom("#{queue}.supervisor")
end
end