Packages
finitomata
0.19.3
0.41.0
0.40.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.1
0.30.3
0.30.2
0.30.1
0.30.0
0.29.10
0.29.9
0.29.8
0.29.7
0.29.6
0.29.5
0.29.4
0.29.3
0.29.2
0.29.1
0.29.0
0.28.1
0.28.0
0.27.1
0.27.0
0.26.4
0.26.3
0.26.2
0.26.1
0.26.0
0.25.0
0.24.4
0.24.3
0.24.2
0.24.1
0.24.0
0.23.7
0.23.6
0.23.5
0.23.4
0.23.3
0.23.2
0.23.1
0.23.0
0.22.1
0.22.0
0.21.4
0.21.3
0.21.2
0.21.1
0.21.0
0.20.2
0.20.1
0.20.0
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.1
0.17.0
0.16.0
0.15.1
0.15.0
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.0
0.12.1
0.12.0
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.1
0.1.0
The FSM implementation generated from PlantUML textual representation.
Current section
Files
Jump to
Current section
Files
lib/finitomata/supervision/supervisor.ex
defmodule Finitomata.Supervisor do
@moduledoc false
use Supervisor
def start_link(id \\ nil)
def start_link([]), do: start_link(nil)
def start_link(id: id), do: start_link(id)
def start_link(id),
do: Supervisor.start_link(__MODULE__, id, name: supervisor_name(id))
@impl Supervisor
def init(id) do
children = [
{Registry, keys: :unique, name: registry_name(id), partitions: System.schedulers_online()},
{Finitomata.Manager, name: manager_name(id)}
]
Supervisor.init(children, strategy: :rest_for_one)
end
def supervisor_name(id \\ nil), do: fq_module(id, Supervisor, true)
def registry_name(id \\ nil), do: fq_module(id, Registry, true)
def manager_name(id \\ nil), do: fq_module(id, Manager, true)
def infinitomata_name(id \\ nil), do: fq_module(id, Infinitomata, true)
def throttler_name(id \\ nil), do: fq_module(id, Throttler, true)
@spec fq_module(id :: any(), who :: any(), atomize? :: boolean()) :: module() | [any()]
defp fq_module(id, who, false), do: [Finitomata, id, who]
defp fq_module(id, who, true) do
id
|> fq_module(who, false)
|> Enum.reject(&is_nil/1)
|> Enum.map(&inspect/1)
|> smart_concat()
end
defp smart_concat([fqn]), do: Module.concat([fqn])
defp smart_concat([fqn, id_who]) do
if String.starts_with?(id_who, fqn),
do: Module.concat([id_who]),
else: Module.concat([fqn, id_who])
end
defp smart_concat([fqn, id, who]) do
if String.starts_with?(id, fqn),
do: Module.concat([id, who]),
else: Module.concat([fqn, id, who])
end
end