57 lines
1.1 KiB
Elixir
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
|