Current section

Files

Jump to
x3m_system lib facade supervisor.ex
Raw

lib/facade/supervisor.ex

defmodule X3m.System.Facade.Supervisor do
use Supervisor
import Cachex.Spec
def start_link(facade_module, facade_name, opts \\ []) do
Supervisor.start_link(__MODULE__, {facade_module, facade_name, opts}, name: _name(facade_name))
end
def init({facade_module, facade_name, opts}) do
children = [
worker(Cachex, [_cache_name(facade_name), [expiration: expiration(interval: 10_000)]]),
supervisor(Task.Supervisor, [[name: _request_sup_name(facade_name)]]),
worker(facade_module, [
_request_sup_name(facade_name),
_cache_name(facade_name),
Keyword.put(opts, :name, facade_name)
])
]
supervise(children, strategy: :one_for_one)
end
defp _name({:global, facade_name}),
do: _name(facade_name)
defp _name(facade_name),
do: Module.concat(facade_name, Supervisor)
defp _request_sup_name({:global, facade_name}),
do: _request_sup_name(facade_name)
defp _request_sup_name(facade_name),
do: Module.concat(facade_name, RequestHandler)
defp _cache_name({:global, facade_name}),
do: _cache_name(facade_name)
defp _cache_name(facade_name),
do: Module.concat(facade_name, RequestCache)
end