Current section
Files
Jump to
Current section
Files
lib/application.ex
defmodule Argos.Application do
@moduledoc """
Arranque de la aplicación Argos.
Configura el handler de Logger personalizado y, según la configuración, inicia
el sistema paralelo y el Circuit Breaker bajo `Argos.Supervisor`.
## Children del Supervisor
- `Argos.Command.CircuitBreaker`: Circuit breaker para comandos del sistema
- `Argos.Parallel.Supervisor`: Sistema de ejecución paralela (opcional, según configuración)
## Configuración
El sistema paralelo se inicia automáticamente a menos que:
- `config :argos, :start_parallel_system, false` esté configurado
- O el entorno sea `:test`
"""
use Application
@impl true
def start(_type, _args) do
setup_logger()
children = parallel_children()
opts = [strategy: :one_for_one, name: Argos.Supervisor]
Supervisor.start_link(children, opts)
end
defp parallel_children do
base_children = [
{Argos.Command.CircuitBreaker, []}
]
if should_start_parallel_system?() do
base_children ++ [Argos.Parallel.Supervisor]
else
base_children
end
end
defp setup_logger do
case :logger.get_handler_config(Argos.Logger) do
{:error, {:not_found, _}} ->
:logger.add_handler(Argos.Logger, Argos.Logger, %{})
_ ->
:ok
end
level = Application.get_env(:logger, :level, :debug)
:logger.set_primary_config(:level, level)
end
defp should_start_parallel_system? do
case Application.get_env(:argos, :start_parallel_system) do
nil ->
Application.get_env(:argos, :env, :dev) != :test
value ->
value
end
end
end