Current section

Files

Jump to
gust lib gust application.ex
Raw

lib/gust/application.ex

defmodule Gust.Application do
# See https://hexdocs.pm/elixir/Application.html
# for more information on OTP Applications
@moduledoc false
use Application
@impl true
def start(_type, _args) do
env = System.get_env("MIX_ENV") || Mix.env() |> to_string()
if env != "test" do
folder = dag_folder()
File.dir?(folder) || raise "DAG folder does not exist!: #{folder}"
end
children =
[
Gust.Vault,
Gust.Repo,
{Registry, keys: :unique, name: Gust.Registry},
{DNSCluster, query: Application.get_env(:gust, :dns_cluster_query) || :ignore},
{Phoenix.PubSub, name: Gust.PubSub},
{DynamicSupervisor, strategy: :one_for_one, name: dag_runner_supervisor()},
{DynamicSupervisor, strategy: :one_for_one, name: dag_stage_runner_supervisor()},
{DynamicSupervisor, strategy: :one_for_one, name: dag_task_runner_supervisor()}
] ++
dag_loader_worker(env) ++
dag_watcher(env) ++
dag_scheduler_worker(env) ++
dag_run_restater_worker(env)
Supervisor.start_link(children, strategy: :one_for_one, name: Gust.Supervisor)
end
defp dag_watcher(env) when env == "dev" do
[{Gust.FileMonitor.Worker, %{dags_folder: dag_folder(), loader: dag_loader()}}]
end
defp dag_watcher(_env), do: []
defp dag_folder, do: Application.get_env(:gust, :dags_folder)
defp dag_runner_supervisor, do: Application.get_env(:gust, :dag_runner_supervisor)
defp dag_task_runner_supervisor, do: Application.get_env(:gust, :dag_task_runner_supervisor)
defp dag_stage_runner_supervisor, do: Application.get_env(:gust, :dag_stage_runner_supervisor)
defp dag_loader, do: Application.get_env(:gust, :dag_loader)
defp dag_scheduler, do: Application.get_env(:gust, :dag_scheduler)
defp dag_loader_worker(env) when env == "test", do: []
defp dag_loader_worker(_env) do
[{Gust.DAG.Loader.Worker, %{dags_folder: dag_folder()}}]
end
defp dag_run_restater_worker(env) when env == "test", do: []
defp dag_run_restater_worker(_env) do
[Gust.DAG.RunRestarter.Worker]
end
defp dag_scheduler_worker(env) when env == "test", do: []
defp dag_scheduler_worker(_env) do
[Gust.DAG.Cron, {dag_scheduler(), name: dag_scheduler()}]
end
end