src/ecrn_sup.erl

%%% @copyright Erlware, LLC. All Rights Reserved.
%%%
%%% This file is provided to you under the BSD License; you may not use
%%% this file except in compliance with the License.
-module(ecrn_sup).

-behaviour(supervisor).

%% API
-export([start_link/0]).

%% Supervisor callbacks
-export([init/1]).

-define(SERVER, ?MODULE).

%%%===================================================================
%%% API functions
%%%===================================================================

-spec start_link() -> {ok, Pid::term()} | ignore | {error, Error::term()}.
start_link() ->
    supervisor:start_link({local, ?SERVER}, ?MODULE, []).

%%%===================================================================
%%% Supervisor callbacks
%%%===================================================================

%% @private
init([]) ->
    SupFlags = #{
        strategy  => one_for_one,
        intensity => application:get_env(erlcron, sup_intensity, 3),
        period    => application:get_env(erlcron, sup_period,   10)
    },

    ChildSup     = #{id       => ecrn_cron_sup,
                     start    => {ecrn_cron_sup, start_link, []},
                     restart  => permanent,
                     shutdown => 1000,
                     type     => supervisor,
                     modules  => [ecrn_cron_sup]},

    RegServer    = #{id       => ecrn_reg,
                     start    => {ecrn_reg, start_link, []},
                     restart  => permanent,
                     shutdown => 1000,
                     type     => worker,
                     modules  => [ecrn_reg]},

    CtrlServer   = #{id       => ecrn_control,
                     start    => {ecrn_control, start_link, []},
                     restart  => permanent,
                     shutdown => 1000,
                     type     => worker,
                     modules  => [ecrn_control]},

    {ok, {SupFlags, [ChildSup, RegServer, CtrlServer]}}.