%%%------------------------------------------------------------------- %%% @author Guido %%% @copyright (C) 2015, Guido Günther %%% @doc %%% %%% @end %%% Created : 15 Sep 2015 by Guido %%%------------------------------------------------------------------- -module(simplec_sup). -behaviour(supervisor). -include("simplec.hrl"). %% API -export([start_link/1]). %% Supervisor callbacks -export([init/1]). -define(SERVER, ?MODULE). %% Helper macro for declaring children of supervisor -define(CHILD(I, Type), {I, {I, start_link, []}, permanent, 5000, Type, [I]}). -define(CHILD_WITH_ARGS(I, Type, Args), {I, {I, start_link, [Args]}, permanent, 5000, Type, [I]}). %%%=================================================================== %%% API functions %%%=================================================================== %%-------------------------------------------------------------------- %% @doc %% Starts the supervisor %% %% @spec start_link() -> {ok, Pid} | ignore | {error, Error} %% @end %%-------------------------------------------------------------------- start_link(Config) -> supervisor:start_link({local, ?SERVER}, ?MODULE, Config). %%%=================================================================== %%% Supervisor callbacks %%%=================================================================== %%-------------------------------------------------------------------- %% @private %% @doc %% Whenever a supervisor is started using supervisor:start_link/[2,3], %% this function is called by the new process to find out about %% restart strategy, maximum restart frequency and child %% specifications. %% %% @spec init(Args) -> {ok, {SupFlags, [ChildSpec]}} | %% ignore | %% {error, Reason} %% @end %%-------------------------------------------------------------------- init(Config) -> RestartStrategy = one_for_one, MaxRestarts = 1000, MaxSecondsBetweenRestarts = 3600, SupFlags = {RestartStrategy, MaxRestarts, MaxSecondsBetweenRestarts}, VmChilds = [{list_to_atom(Url), {simplec_vms, start_link, [{url, Url}]}, permanent, 5000, worker, [simplec_vms]} || Url <- Config#config.uris], Childs = VmChilds ++ [?CHILD_WITH_ARGS(simplec_hostsfile, worker, Config)], {ok, {SupFlags, Childs}}. %%%=================================================================== %%% Internal functions %%%===================================================================