%%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
%% compliance with the License. You should have received a copy of the
%% Erlang Public License along with this software. If not, it can be
%% retrieved online at http://www.erlang.org/.
%%
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and limitations
%% under the License.
%%
%% %CopyrightEnd%
%%
-module(snmp_app_sup).
-include("snmp_debug.hrl").
-behaviour(supervisor).
%% External exports
-export([start_link/0, start_agent/2, start_manager/2]).
%% Internal exports
-export([stop/0]).
%% supervisor callbacks
-export([init/1]).
-define(SERVER, ?MODULE).
%%%-------------------------------------------------------------------
%%% API
%%%-------------------------------------------------------------------
start_link() ->
?d("start_link -> entry",[]),
SupName = {local, ?MODULE},
supervisor:start_link(SupName, ?MODULE, []).
stop() ->
?d("stop -> entry", []),
case whereis(?SERVER) of
Pid when is_pid(Pid) ->
?d("stop -> Pid: ~p", [Pid]),
exit(Pid, shutdown),
?d("stop -> stopped", []),
ok;
_ ->
?d("stop -> not running", []),
not_running
end.
start_agent(Type, Opts) ->
?d("start_agent -> entry with"
"~n Type: ~p"
"~n Opts: ~p", [Type, Opts]),
Restart = get_restart(Opts, permanent),
start_sup_child(snmpa_supervisor, Restart, [Type, Opts]).
start_manager(Type, Opts) ->
?d("start_manager -> entry with"
"~n Type: ~p"
"~n Opts: ~p", [Type, Opts]),
Restart = get_restart(Opts, transient),
start_sup_child(snmpm_supervisor, Restart, [Type, Opts]).
%%%-------------------------------------------------------------------
%%% Callback functions from supervisor
%%%-------------------------------------------------------------------
%%--------------------------------------------------------------------
%% Func: init/1
%% Returns: {ok, {SupFlags, [ChildSpec]}} |
%% ignore |
%% {error, Reason}
%%--------------------------------------------------------------------
init(_Args) ->
?d("init -> entry", []),
Flags = {one_for_one, 0, 1},
Sups = [],
{ok, {Flags, Sups}}.
%%%-------------------------------------------------------------------
%%% Internal functions
%%%-------------------------------------------------------------------
get_restart(Opts, Def) ->
get_opt(Opts, restart_type, Def).
get_opt(Opts, Key, Def) ->
snmp_misc:get_option(Key, Opts, Def).
start_sup_child(Mod, Type, Args) ->
Spec = sup_spec(Mod, Type, Args),
supervisor:start_child(?MODULE, Spec).
sup_spec(Name, Type, Args) ->
{Name,
{Name, start_link, Args},
Type, 2000, supervisor, [Name, supervisor]}.
% i(F) ->
% i(F, []).
% i(F, A) ->
% io:format("~p: " ++ F ++ "~n", [?MODULE|A]).