who_need_help/lib/who_need_help/application.ex

63 lines
1.8 KiB
Elixir

defmodule WhoNeedHelp.Application do
# See https://elixir.hexdocs.pm/Application.html
# for more information on OTP Applications
@moduledoc false
use Application
@e2e_routes Application.compile_env(:who_need_help, :e2e_routes, false)
@impl true
def start(_type, _args) do
if @e2e_routes do
boot_id = :crypto.strong_rand_bytes(16) |> Base.url_encode64(padding: false)
:persistent_term.put({WhoNeedHelp, :e2e_boot_id}, boot_id)
end
common_children = [
WhoNeedHelpWeb.Telemetry,
WhoNeedHelp.Repo,
{DNSCluster, query: Application.get_env(:who_need_help, :dns_cluster_query) || :ignore},
{Phoenix.PubSub, name: WhoNeedHelp.PubSub}
]
oban_config = Application.fetch_env!(:who_need_help, Oban)
oban_client_config = Keyword.merge(oban_config, queues: [], plugins: [], peer: false)
role_children =
case Application.fetch_env!(:who_need_help, :app_role) do
:web ->
[
{Oban, oban_client_config},
WhoNeedHelpWeb.Presence,
WhoNeedHelp.TrackingPresenceCleanup,
WhoNeedHelpWeb.Endpoint
]
:worker ->
[{Oban, oban_config}, WhoNeedHelpWeb.WorkerMetricsPlug]
:migrate ->
[{Oban, oban_client_config}]
end
children = common_children ++ role_children
# See https://elixir.hexdocs.pm/Supervisor.html
# for other strategies and supported options
opts = [strategy: :one_for_one, name: WhoNeedHelp.Supervisor]
Supervisor.start_link(children, opts)
end
# Tell Phoenix to update the endpoint configuration
# whenever the application is updated.
@impl true
def config_change(changed, _new, removed) do
if Application.get_env(:who_need_help, :app_role) == :web do
WhoNeedHelpWeb.Endpoint.config_change(changed, removed)
end
:ok
end
end