Packages
tarearbol
0.4.0
1.12.0
1.11.2
1.11.1
1.11.0
1.10.4
1.10.3
1.10.2
1.10.0
1.9.102
1.9.101
1.9.100
1.9.99
1.9.11
1.9.10
1.9.9
1.9.8
1.9.7
1.9.6
1.9.5
1.9.4
1.9.3
1.9.2
1.9.1
1.9.0
1.8.2
1.8.1
1.8.0
1.7.0
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.0
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.0
1.2.1
1.2.0
1.1.2
1.1.1
1.1.0
1.0.4
1.0.3
1.0.2
1.0.0
0.99.11
0.99.10
0.99.9
0.99.8
0.99.7
0.99.6
0.99.4
0.99.3
0.99.2
0.99.1
0.99.0
0.14.1
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.0
0.10.0
0.9.6
0.9.5
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.0
0.6.0
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.2
0.2.1
0.2.0
0.1.0
The supervised tree of tasks, simplifying the process of handling: - recurrent tasks - retried tasks - long tasks - etc
Current section
Files
Jump to
Current section
Files
lib/tarearbol/application.ex
defmodule Tarearbol.Application do
# See https://hexdocs.pm/elixir/Application.html
# for more information on OTP Applications
@moduledoc false
use Application
def start(_type, _args) do
import Supervisor.Spec, warn: false
# List all child processes to be supervised
children = [
supervisor(Task.Supervisor, [[name: Tarearbol.Application]])
# {Tarearbol.Worker, arg},
]
# See https://hexdocs.pm/elixir/Supervisor.html
# for other strategies and supported options
opts = [strategy: :one_for_one, name: Tarearbol.Supervisor]
Supervisor.start_link(children, opts)
end
def children do
Task.Supervisor.children(Tarearbol.Application)
end
def jobs do
Tarearbol.Application.children
|> Enum.map(& Process.info(&1, :dictionary))
|> Enum.map(fn {:dictionary, dict} -> dict[:job] end)
|> Enum.filter(& &1)
end
def kill(), do: for child <- children(), do: kill(child)
def kill(child) when is_pid(child) do
do_kill(Enum.member?(Tarearbol.Application.children(), child), child)
end
def task!(job) when is_function(job, 0) do
Task.Supervisor.async_nolink(Tarearbol.Application, job)
end
def task!({mod, fun, params}) do
Task.Supervisor.async_nolink(Tarearbol.Application, mod, fun, params)
end
##############################################################################
defp do_kill(true, child) do
Task.Supervisor.terminate_child(Tarearbol.Application, child)
end
defp do_kill(false, child) do
with :ok <- do_kill(true, child), do: {:error, :dead}
end
end