farmbot_os/farmbot_os/lib/farmbot_os/configurator/supervisor.ex

57 lines
1.1 KiB
Elixir

defmodule FarmbotOS.Configurator.Supervisor do
@moduledoc """
Supervisor for the Configurator Web stack
"""
use Supervisor
alias FarmbotOS.Configurator.{Router, LoggerSocket, SchedulerSocket}
@doc false
def start_link(args) do
Supervisor.start_link(__MODULE__, args, name: __MODULE__)
end
@impl Supervisor
def init(_args) do
:ets.new(:configurator_session, [
:named_table,
:public,
read_concurrency: true
])
transport_opts = [
num_acceptors: 1
]
opts = [
port: default_port(),
transport_options: transport_opts,
dispatch: dispatch()
]
children = [
{Plug.Adapters.Cowboy, scheme: :http, plug: Router, options: opts}
]
Supervisor.init(children, strategy: :one_for_one)
end
defp default_port do
case System.get_env("CONFIGURATOR_PORT") do
nil -> 80
str -> String.to_integer(str)
end
end
defp dispatch() do
[
{:_,
[
{"/logger_socket", LoggerSocket, []},
{"/scheduler_socket", SchedulerSocket, []},
{:_, Plug.Cowboy.Handler, {Router, []}}
]}
]
end
end