]> review.fuel-infra Code Review - packages/trusty/rabbitmq-server.git/blob
53e11f40770ee376bac1b445c7f9a5aeb3b09b5a
[packages/trusty/rabbitmq-server.git] /
1 %% @author author <author@example.com>
2 %% @copyright YYYY author.
3
4 %% @doc Supervisor for the {{appid}} application.
5
6 -module({{appid}}_sup).
7 -author('author <author@example.com>').
8
9 -behaviour(supervisor).
10
11 %% External exports
12 -export([start_link/0, upgrade/0]).
13
14 %% supervisor callbacks
15 -export([init/1]).
16
17 %% @spec start_link() -> ServerRet
18 %% @doc API for starting the supervisor.
19 start_link() ->
20     supervisor:start_link({local, ?MODULE}, ?MODULE, []).
21
22 %% @spec upgrade() -> ok
23 %% @doc Add processes if necessary.
24 upgrade() ->
25     {ok, {_, Specs}} = init([]),
26
27     Old = sets:from_list(
28             [Name || {Name, _, _, _} <- supervisor:which_children(?MODULE)]),
29     New = sets:from_list([Name || {Name, _, _, _, _, _} <- Specs]),
30     Kill = sets:subtract(Old, New),
31
32     sets:fold(fun (Id, ok) ->
33                       supervisor:terminate_child(?MODULE, Id),
34                       supervisor:delete_child(?MODULE, Id),
35                       ok
36               end, ok, Kill),
37
38     [supervisor:start_child(?MODULE, Spec) || Spec <- Specs],
39     ok.
40
41 %% @spec init([]) -> SupervisorTree
42 %% @doc supervisor callback.
43 init([]) ->
44     Ip = case os:getenv("WEBMACHINE_IP") of false -> "0.0.0.0"; Any -> Any end,
45     {ok, App} = application:get_application(?MODULE),
46     {ok, Dispatch} = file:consult(filename:join([priv_dir(App),
47                                                  "dispatch.conf"])),
48     Port = case os:getenv("WEBMACHINE_PORT") of
49             false -> 8000;
50             AnyPort -> AnyPort
51           end,
52     WebConfig = [
53                  {ip, Ip},
54                  {port, Port},
55                  {log_dir, "priv/log"},
56                  {dispatch, Dispatch}],
57     Web = {webmachine_mochiweb,
58            {webmachine_mochiweb, start, [WebConfig]},
59            permanent, 5000, worker, [mochiweb_socket_server]},
60     Processes = [Web],
61     {ok, { {one_for_one, 10, 10}, Processes} }.
62
63 %%
64 %% @doc return the priv dir
65 priv_dir(Mod) ->
66     case code:priv_dir(Mod) of
67         {error, bad_name} ->
68             Ebin = filename:dirname(code:which(Mod)),
69             filename:join(filename:dirname(Ebin), "priv");
70         PrivDir ->
71             PrivDir
72     end.