Current section
Files
Jump to
Current section
Files
lib/types/spec.ex
defmodule Overseer.Spec do
@moduledoc """
Data that holding all the runtime information for the Overseer
"""
alias Overseer.{Spec, Release, Utils}
@max_nodes 8
@conn_timeout 600 * 1000
@pair_timeout 120 * 1000
@term_timeout 60 * 1000
@type strategy :: :simple_one_for_one | :one_for_one
@type t :: %__MODULE__{
adapter: module,
strategy: strategy,
max_nodes: integer,
conn_timeout: integer,
pair_timeout: integer,
term_timeout: integer,
args: term,
release: Release
}
defstruct adapter: Overseer.MissingAdapter,
strategy: :simple_one_for_one,
max_nodes: @max_nodes,
conn_timeout: @conn_timeout,
pair_timeout: @pair_timeout,
term_timeout: @term_timeout,
args: nil,
release: nil
def create(adapter, adapter_args, release_args, options \\ []) do
strategy = Keyword.get(options, :strategy, :simple_one_for_one)
Utils.assert(
strategy,
:simple_one_for_one,
"Expected :simple_one_for_one for :strategy option in current version. No other value accepted"
)
Utils.assert(
Code.ensure_loaded?(adapter),
true,
"Module #{inspect(adapter)} cannot be loaded"
)
release = Release.create(release_args)
args =
case adapter.validate(adapter_args) do
{:ok, result} -> result
{:error, msg} -> Utils.assert(true, false, msg)
end
%Spec{
adapter: adapter,
strategy: strategy,
max_nodes: Keyword.get(options, :max_nodes, @max_nodes),
conn_timeout: Keyword.get(options, :conn_timeout, @conn_timeout),
pair_timeout: Keyword.get(options, :pair_timeout, @pair_timeout),
term_timeout: Keyword.get(options, :term_timeout, @term_timeout),
args: args,
release: release
}
end
end