%%%------------------------------------------------------------------------ %%% File: $Id$ %%%------------------------------------------------------------------------ %%% @doc This module implements application and supervisor behaviors %%% of the `dockerexec' application. %%% @author Originally Serge Aleynikov, forked by Tyler Young %%% @version $Revision: 1.1 $ %%% @end %%%---------------------------------------------------------------------- %%% Created: 2003-06-25 by Serge Aleynikov %%% $URL$ %%%------------------------------------------------------------------------ -module(dockerexec_app). -author('tyler@sleepeasy.app'). -id("$Id$"). -behaviour(application). -behaviour(supervisor). %% application and supervisor callbacks -export([start/2, stop/1, init/1]). %%%---------------------------------------------------------------------- %%% API %%%---------------------------------------------------------------------- %%---------------------------------------------------------------------- %% This is the entry module for your application. It contains the %% start function and some other stuff. You identify this module %% using the 'mod' attribute in the .app file. %% %% The start function is called by the application controller. %% It normally returns {ok,Pid}, i.e. the same as gen_server and %% supervisor. Here, we simply call the start function in our supervisor. %% One can also return {ok, Pid, State}, where State is reused in stop(State). %% %% Type can be 'normal' or {takeover,FromNode}. If the 'start_phases' %% attribute is present in the .app file, Type can also be {failover,FromNode}. %% This is an odd compatibility thing. %% @private %%---------------------------------------------------------------------- start(_Type, _Args) -> supervisor:start_link({local, ?MODULE}, ?MODULE, []). %%---------------------------------------------------------------------- %% stop(State) is called when the application has been terminated, and %% all processes are gone. The return value is ignored. %% @private %%---------------------------------------------------------------------- stop(_S) -> ok. %%%--------------------------------------------------------------------- %%% Supervisor behaviour callbacks %%%--------------------------------------------------------------------- %% @private init([]) -> Options = lists:foldl( fun(I, Acc) -> add_option(I, Acc) end, [], [I || {I, _} <- dockerexec:default()] ), {ok, { % Allow MaxR restarts within MaxT seconds {one_for_one, 3, 30}, % Id = internal id [ {dockerexec, % StartFun = {M, F, A} {dockerexec, start_link, [Options]}, % Restart = permanent | transient | temporary permanent, % Shutdown - wait 10 seconds, to give child processes time to be killed off. 10000, % Type = worker | supervisor worker, % Modules = [Module] | dynamic [dockerexec]} ] }}. add_option(Option, Acc) -> case application:get_env(dockerexec, Option) of {ok, Value} -> [{Option, Value} | Acc]; undefined -> Acc end.