ebb_work_supv.erl 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. -module(ebb_work_supv).
  2. -behaviour(supervisor).
  3. %% API
  4. -export([start_link/1, start_work/4]).
  5. %% Supervisor callbacks
  6. -export([init/1]).
  7. -define(SERVER, ?MODULE).
  8. %%====================================================================
  9. %% API functions
  10. %%====================================================================
  11. %%--------------------------------------------------------------------
  12. %% Function: start_link() -> {ok,Pid} | ignore | {error,Error}
  13. %% Description: Starts the supervisor
  14. %%--------------------------------------------------------------------
  15. start_link(Args) ->
  16. supervisor:start_link({local, ?SERVER}, ?MODULE, Args).
  17. start_work(local, Func, Args, Receiver) ->
  18. Worker = {make_ref(), {ebb_worker, start_link,
  19. [Func, Args, Receiver]},
  20. transient, brutal_kill, worker, [ebb_worker]},
  21. supervisor:start_child(?SERVER, Worker);
  22. start_work(distributed, Func, Args, Receiver) ->
  23. Worker = {make_ref(), {ebb_worker, start_link,
  24. [distributed, Func, Args, Receiver]},
  25. transient, brutal_kill, supervisor, [ebb_worker]},
  26. supervisor:start_child(?SERVER, Worker).
  27. %%====================================================================
  28. %% Supervisor callbacks
  29. %%====================================================================
  30. %%--------------------------------------------------------------------
  31. %% Func: init(Args) -> {ok, {SupFlags, [ChildSpec]}} |
  32. %% ignore |
  33. %% {error, Reason}
  34. %% Description: Whenever a supervisor is started using
  35. %% supervisor:start_link/[2,3], this function is called by the new process
  36. %% to find out about restart strategy, maximum restart frequency and child
  37. %% specifications.
  38. %%--------------------------------------------------------------------
  39. init(Args) ->
  40. Manager = {ebb_work_manager, {ebb_work_manager, start_link, [Args]},
  41. permanent, 2000, worker, [ebb_work_manager]},
  42. {ok, {{one_for_one, 10, 1}, [Manager]}}.
  43. %%====================================================================
  44. %% Internal functions
  45. %%====================================================================