Current section

Files

Jump to
ddb_connection src ddb_connection_sup.erl
Raw

src/ddb_connection_sup.erl

%%%-------------------------------------------------------------------
%% @doc ddb_connection top level supervisor.
%% @end
%%%-------------------------------------------------------------------
-module(ddb_connection_sup).
-behaviour(supervisor).
%% API
-export([start_link/0, endpoint/0]).
%% Supervisor callbacks
-export([init/1]).
-ignore_xref([endpoint/0]).
-define(POOL, backend_connection).
%%====================================================================
%% API functions
%%====================================================================
start_link() ->
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
%%====================================================================
%% Supervisor callbacks
%%====================================================================
%% Child :: {Id,StartFunc,Restart,Shutdown,Type,Modules}
init([]) ->
{Host, Port} = endpoint(),
{ok, PoolSize} = application:get_env(ddb_connection, pool_size),
{ok, PoolMax} = application:get_env(ddb_connection, pool_max),
SizeArgs = [
{size, PoolSize},
{max_overflow, PoolMax}
],
PoolArgs = [{name, {local, ?POOL}},
{worker_module, ddb_connection}] ++ SizeArgs,
WorkerArgs = [Host, Port],
{ok, {{one_for_one, 5, 10},
[poolboy:child_spec(?POOL, PoolArgs, WorkerArgs)]}}.
endpoint() ->
case application:get_env(ddb_connection, backend) of
{ok, {Host, Port}} ->
{Host, Port};
_ ->
{ok, Host} = application:get_env(ddb_connection,
backend_host),
{ok, Port} = application:get_env(ddb_connection,
backend_port),
{Host, Port}
end.