Current section
Files
Jump to
Current section
Files
lib/application.ex
defmodule Venomous.Application do
@moduledoc """
This module initializes the application supervision tree.
It starts the supervisor for managing SnakeManager process with the given Application config.
"""
use Application
@default_ttl_minutes 15
@default_cleaner_interval 60_000
@default_perpetual_workers 10
def start(_type, _args) do
children =
[
Supervisor.child_spec(
{Venomous.SnakeManager, snake_manager_specs()},
id: Venomous.SnakeManager,
restart: :permanent
)
] ++ snake_supervisor_spec()
opts = [strategy: :one_for_one, name: Venomous.Supervisor]
Supervisor.start_link(children, opts)
end
defp snake_manager_specs() do
table = :ets.new(:snake_terrarium, [:set, :public])
config = Application.get_env(:venomous, :snake_manager, %{})
encoder_decoder = Map.get(config, :erlport_encoder, %{})
snake_ttl = Map.get(config, :snake_ttl_minutes, @default_ttl_minutes)
perpetual_workers =
Map.get(config, :perpetual_workers, @default_perpetual_workers)
cleaner_interval_ms =
Map.get(config, :cleaner_interval, @default_cleaner_interval)
%{
table: table,
snake_ttl_minutes: snake_ttl,
perpetual_workers: perpetual_workers,
cleaner_interval_ms: cleaner_interval_ms,
erlport_encoder: encoder_decoder
}
end
defp snake_supervisor_spec() do
if Application.get_env(:venomous, :snake_supervisor_enabled, false) do
[{Venomous.SnakeSupervisor, [strategy: :one_for_one, max_restarts: 0, max_children: 50]}]
else
[]
end
end
end