/support/templates/mochiwebapp_skel/src/mochiapp_sup.erl
Erlang | 56 lines | 33 code | 12 blank | 11 comment | 3 complexity | c948ca2b19a7c7cea0e008245adcabd4 MD5 | raw file
Possible License(s): MIT
- %% @author {{author}}
- %% @copyright {{year}} {{author}}
- %% @doc Supervisor for the {{appid}} application.
- -module({{appid}}_sup).
- -author("{{author}}").
- -behaviour(supervisor).
- %% External exports
- -export([start_link/0, upgrade/0]).
- %% supervisor callbacks
- -export([init/1]).
- %% @spec start_link() -> ServerRet
- %% @doc API for starting the supervisor.
- start_link() ->
- supervisor:start_link({local, ?MODULE}, ?MODULE, []).
- %% @spec upgrade() -> ok
- %% @doc Add processes if necessary.
- upgrade() ->
- {ok, {_, Specs}} = init([]),
- Old = sets:from_list(
- [Name || {Name, _, _, _} <- supervisor:which_children(?MODULE)]),
- New = sets:from_list([Name || {Name, _, _, _, _, _} <- Specs]),
- Kill = sets:subtract(Old, New),
- sets:fold(fun (Id, ok) ->
- supervisor:terminate_child(?MODULE, Id),
- supervisor:delete_child(?MODULE, Id),
- ok
- end, ok, Kill),
- [supervisor:start_child(?MODULE, Spec) || Spec <- Specs],
- ok.
- %% @spec init([]) -> SupervisorTree
- %% @doc supervisor callback.
- init([]) ->
- Web = web_specs({{appid}}_web, {{port}}),
- Processes = [Web],
- Strategy = {one_for_one, 10, 10},
- {ok,
- {Strategy, lists:flatten(Processes)}}.
- web_specs(Mod, Port) ->
- WebConfig = [{ip, {0,0,0,0}},
- {port, Port},
- {docroot, {{appid}}_deps:local_path(["priv", "www"])}],
- {Mod,
- {Mod, start, [WebConfig]},
- permanent, 5000, worker, dynamic}.