Current section

Files

Jump to
eflambe src eflambe_sup.erl
Raw

src/eflambe_sup.erl

%%%-------------------------------------------------------------------
%% @doc eflambe top level supervisor.
%% @end
%%%-------------------------------------------------------------------
-module(eflambe_sup).
-behaviour(supervisor).
% API
-export([start_link/0, get_or_start_server/0]).
%% supervisor callbacks
-export([init/1]).
-define(SERVER, ?MODULE).
-spec start_link() -> {ok, pid()} | ignore | {error, Error :: any()}.
start_link() ->
supervisor:start_link({local, ?SERVER}, ?MODULE, []).
-spec get_or_start_server() -> {ok, pid()}.
get_or_start_server() ->
case supervisor:restart_child(?SERVER, eflambe_server) of
{error, running} ->
{ok, whereis(eflambe_server)};
{ok, Server} -> {ok, Server}
end.
%%%===================================================================
%%% supervisor callbacks
%%%===================================================================
init([]) ->
SupFlags = #{strategy => one_for_one,
intensity => 1,
period => 5},
ChildSpecs = [#{id => eflambe_server,
start => {eflambe_server, start_link, []},
restart => temporary,
shutdown => brutal_kill,
type => worker,
modules => [eflambe_server]}],
{ok, {SupFlags, ChildSpecs}}.