Packages
x3m_system
0.1.1
0.9.1
0.9.0
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
retired
0.7.20
0.7.19
0.7.18
0.7.17
0.7.16
0.7.15
0.7.14
0.7.13
0.7.12
0.7.11
0.7.10
0.7.9
0.7.8
retired
0.7.7
0.7.6
retired
0.7.5
0.7.4
retired
0.7.3
retired
0.7.2
0.7.1
0.7.0
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
retired
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.1.1
0.1.0
Building blocks for distributed and/or CQRS/ES systems
Current section
Files
Jump to
Current section
Files
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