Packages
honeydew
1.4.5
1.5.0
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.0
1.2.8
1.2.7
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-rc7
1.0.0-rc6
1.0.0-rc5
1.0.0-rc4
1.0.0-rc3
1.0.0-rc2
1.0.0-rc1
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
Pluggable local/clusterable job queue focused on safety.
Current section
Files
Jump to
Current section
Files
lib/honeydew/workers.ex
defmodule Honeydew.Workers do
@moduledoc false
use Supervisor
alias Honeydew.WorkerRootSupervisor
@type name :: Honeydew.queue_name()
@type mod_or_mod_args :: Honeydew.mod_or_mod_args()
@type worker_opts :: Honeydew.worker_opts()
@spec workers() :: [name]
def workers do
__MODULE__
|> Supervisor.which_children
|> Enum.map(fn {queue, _, _, _} -> queue end)
|> Enum.sort
end
@spec stop_workers(name) :: :ok | {:error, :not_running}
def stop_workers(name) do
with :ok <- Supervisor.terminate_child(__MODULE__, name) do
Supervisor.delete_child(__MODULE__, name)
end
end
@spec start_workers(name, mod_or_mod_args, worker_opts) :: :ok
def start_workers(name, module_and_args, opts \\ []) do
{module, args} =
case module_and_args do
module when is_atom(module) -> {module, []}
{module, args} -> {module, args}
end
opts = %{
ma: {module, args},
num: opts[:num] || 10,
init_retry_secs: opts[:init_retry_secs] || 5,
shutdown: opts[:shutdown] || 10_000,
nodes: opts[:nodes] || []
}
unless Code.ensure_loaded?(module) do
raise ArgumentError, invalid_module_error(module)
end
Honeydew.create_groups(name)
with {:ok, _} <- Supervisor.start_child(__MODULE__, {WorkerRootSupervisor, [name, opts]}) do
:ok
end
end
def start_link(args) do
Supervisor.start_link(__MODULE__, args, name: __MODULE__)
end
@impl true
def init(_args) do
Supervisor.init([], strategy: :one_for_one)
end
def invalid_module_error(module) do
"unable to find module #{inspect module} for workers"
end
end