]> granicus.if.org Git - ejabberd/commitdiff
Simplify ejabberd_sup code
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Sat, 3 Mar 2018 15:05:12 +0000 (18:05 +0300)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Sat, 3 Mar 2018 15:05:12 +0000 (18:05 +0300)
src/ejabberd_sup.erl

index e829ea61da57cd0abfc7c8ffa7fd0516944bec46..f692575c1ee06c996b2cca17429e3790ca38536b 100644 (file)
 
 -export([start_link/0, init/1]).
 
+-define(SHUTDOWN_TIMEOUT, timer:seconds(30)).
+
 start_link() ->
     supervisor:start_link({local, ?MODULE}, ?MODULE, []).
 
 init([]) ->
-    Hooks =
-       {ejabberd_hooks,
-        {ejabberd_hooks, start_link, []},
-        permanent,
-        brutal_kill,
-        worker,
-        [ejabberd_hooks]},
-    Cluster = {ejabberd_cluster,
-              {ejabberd_cluster, start_link, []},
-              permanent,
-              5000,
-              worker,
-              [ejabberd_cluster]},
-    S2S =
-       {ejabberd_s2s,
-        {ejabberd_s2s, start_link, []},
-        permanent,
-        brutal_kill,
-        worker,
-        [ejabberd_s2s]},
-    Captcha =
-       {ejabberd_captcha,
-        {ejabberd_captcha, start_link, []},
-        permanent,
-        brutal_kill,
-        worker,
-        [ejabberd_captcha]},
-    Listener =
-       {ejabberd_listener,
-        {ejabberd_listener, start_link, []},
-        permanent,
-        infinity,
-        supervisor,
-        [ejabberd_listener]},
-    S2SInSupervisor =
-       {ejabberd_s2s_in_sup,
-        {ejabberd_tmp_sup, start_link,
-         [ejabberd_s2s_in_sup, ejabberd_s2s_in]},
-        permanent,
-        infinity,
-        supervisor,
-        [ejabberd_tmp_sup]},
-    S2SOutSupervisor =
-       {ejabberd_s2s_out_sup,
-        {ejabberd_tmp_sup, start_link,
-         [ejabberd_s2s_out_sup, ejabberd_s2s_out]},
-        permanent,
-        infinity,
-        supervisor,
-        [ejabberd_tmp_sup]},
-    ServiceSupervisor =
-       {ejabberd_service_sup,
-        {ejabberd_tmp_sup, start_link,
-         [ejabberd_service_sup, ejabberd_service]},
-        permanent,
-        infinity,
-        supervisor,
-        [ejabberd_tmp_sup]},
-    BackendSupervisor = {ejabberd_backend_sup,
-                        {ejabberd_backend_sup, start_link, []},
-                        permanent, infinity, supervisor,
-                        [ejabberd_backend_sup]},
-    ACL = {acl, {acl, start_link, []},
-          permanent, 5000, worker, [acl]},
-    Shaper = {shaper, {shaper, start_link, []},
-          permanent, 5000, worker, [shaper]},
-    SQLSupervisor = {ejabberd_rdbms,
-                    {ejabberd_rdbms, start_link, []},
-                    permanent, infinity, supervisor, [ejabberd_rdbms]},
-    RiakSupervisor = {ejabberd_riak_sup,
-                    {ejabberd_riak_sup, start_link, []},
-                     permanent, infinity, supervisor, [ejabberd_riak_sup]},
-    RedisSupervisor = {ejabberd_redis_sup,
-                      {ejabberd_redis_sup, start_link, []},
-                      permanent, infinity, supervisor, [ejabberd_redis_sup]},
-    Router = {ejabberd_router, {ejabberd_router, start_link, []},
-             permanent, 5000, worker, [ejabberd_router]},
-    RouterMulticast = {ejabberd_router_multicast,
-                      {ejabberd_router_multicast, start_link, []},
-                      permanent, 5000, worker, [ejabberd_router_multicast]},
-    Local = {ejabberd_local, {ejabberd_local, start_link, []},
-            permanent, 5000, worker, [ejabberd_local]},
-    SM = {ejabberd_sm, {ejabberd_sm, start_link, []},
-         permanent, 5000, worker, [ejabberd_sm]},
-    GenModSupervisor = {ejabberd_gen_mod_sup, {gen_mod, start_link, []},
-                       permanent, infinity, supervisor, [gen_mod]},
-    ExtMod = {ext_mod, {ext_mod, start_link, []},
-             permanent, 5000, worker, [ext_mod]},
-    Auth = {ejabberd_auth, {ejabberd_auth, start_link, []},
-           permanent, 5000, worker, [ejabberd_auth]},
-    OAuth = {ejabberd_oauth, {ejabberd_oauth, start_link, []},
-            permanent, 5000, worker, [ejabberd_oauth]},
-    Translation = {translate, {translate, start_link, []},
-                  permanent, 5000, worker, [translate]},
-    AccessPerms = {ejabberd_access_permissions,
-                  {ejabberd_access_permissions, start_link, []},
-                  permanent, 5000, worker, [ejabberd_access_permissions]},
-    Ctl = {ejabberd_ctl, {ejabberd_ctl, start_link, []},
-          permanent, 5000, worker, [ejabberd_ctl]},
-    Commands = {ejabberd_commands, {ejabberd_commands, start_link, []},
-               permanent, 5000, worker, [ejabberd_commands]},
-    Admin = {ejabberd_admin, {ejabberd_admin, start_link, []},
-            permanent, 5000, worker, [ejabberd_admin]},
-    CyrSASL = {cyrsasl, {cyrsasl, start_link, []},
-              permanent, 5000, worker, [cyrsasl]},
-    PKIX = {ejabberd_pkix, {ejabberd_pkix, start_link, []},
-           permanent, 5000, worker, [ejabberd_pkix]},
-    ACME = {ejabberd_acme, {ejabberd_acme, start_link, []},
-           permanent, 5000, worker, [ejabberd_acme]},
-    IQ = {ejabberd_iq, {ejabberd_iq, start_link, []},
-         permanent, 5000, worker, [ejabberd_iq]},
     {ok, {{one_for_one, 10, 1},
-         [Hooks,
-          Cluster,
-          CyrSASL,
-          Translation,
-          AccessPerms,
-          Ctl,
-          Commands,
-          Admin,
-          PKIX,
-          ACME,
-          Listener,
-          S2S,
-          S2SInSupervisor,
-          S2SOutSupervisor,
-          ServiceSupervisor,
-          ACL,
-          Shaper,
-          BackendSupervisor,
-          SQLSupervisor,
-          RiakSupervisor,
-          RedisSupervisor,
-          IQ,
-          Router,
-          RouterMulticast,
-          Local,
-          SM,
-          Captcha,
-          ExtMod,
-          GenModSupervisor,
-          Auth,
-          OAuth]}}.
+         [worker(ejabberd_hooks),
+          worker(ejabberd_cluster),
+          worker(cyrsasl),
+          worker(translate),
+          worker(ejabberd_access_permissions),
+          worker(ejabberd_ctl),
+          worker(ejabberd_commands),
+          worker(ejabberd_admin),
+          worker(ejabberd_pkix),
+          worker(ejabberd_acme),
+          supervisor(ejabberd_listener),
+          worker(ejabberd_s2s),
+          simple_supervisor(ejabberd_s2s_in),
+          simple_supervisor(ejabberd_s2s_out),
+          simple_supervisor(ejabberd_service),
+          worker(acl),
+          worker(shaper),
+          supervisor(ejabberd_backend_sup),
+          supervisor(ejabberd_rdbms),
+          supervisor(ejabberd_riak_sup),
+          supervisor(ejabberd_redis_sup),
+          worker(ejabberd_iq),
+          worker(ejabberd_router),
+          worker(ejabberd_router_multicast),
+          worker(ejabberd_local),
+          worker(ejabberd_sm),
+          worker(ejabberd_captcha),
+          worker(ext_mod),
+          supervisor(ejabberd_gen_mod_sup, gen_mod),
+          worker(ejabberd_auth),
+          worker(ejabberd_oauth)]}}.
+
+%%%===================================================================
+%%% Internal functions
+%%%===================================================================
+worker(Mod) ->
+    {Mod, {Mod, start_link, []}, permanent, ?SHUTDOWN_TIMEOUT, worker, [Mod]}.
+
+supervisor(Mod) ->
+    supervisor(Mod, Mod).
+
+supervisor(Name, Mod) ->
+    {Name, {Mod, start_link, []}, permanent, infinity, supervisor, [Mod]}.
+
+simple_supervisor(Mod) ->
+    Name = list_to_atom(atom_to_list(Mod) ++ "_sup"),
+    {Name, {ejabberd_tmp_sup, start_link, [Name, Mod]},
+     permanent, infinity, supervisor, [ejabberd_tmp_sup]}.