Current section

Files

Jump to
grpcbox src grpcbox_sup.erl
Raw

src/grpcbox_sup.erl

%%%-------------------------------------------------------------------
%% @doc grpcbox top level supervisor.
%% @end
%%%-------------------------------------------------------------------
-module(grpcbox_sup).
-behaviour(supervisor).
-export([start_link/0,
start_child/0,
start_child/1,
terminate_child/1]).
-export([init/1]).
-include("grpcbox.hrl").
-define(SERVER, ?MODULE).
start_link() ->
supervisor:start_link({local, ?SERVER}, ?MODULE, []).
start_child() ->
GrpcOpts = application:get_env(grpcbox, grpc_opts, #{}),
ServerOpts = application:get_env(grpcbox, server_opts, #{}),
ListenOpts = application:get_env(grpcbox, listen_opts, #{}),
PoolOpts = application:get_env(grpcbox, pool_opts, #{}),
TransportOpts = application:get_env(grpcbox, transport_opts, #{}),
start_child(#{server_opts => ServerOpts,
grpc_opts => GrpcOpts,
listen_opts => ListenOpts,
pool_opts => PoolOpts,
transport_opts => TransportOpts}).
start_child(Opts) ->
GrpcOpts = maps:get(grpc_opts, Opts, #{}),
ServerOpts = maps:get(server_opts, Opts, #{}),
ListenOpts = maps:get(listen_opts, Opts, #{}),
PoolOpts = maps:get(pool_opts, Opts, #{}),
TransportOpts = maps:get(transport_opts, Opts, #{}),
supervisor:start_child(?SERVER, [ServerOpts, GrpcOpts, ListenOpts, PoolOpts, TransportOpts]).
terminate_child(ListenOpts) ->
supervisor:terminate_child(?SERVER, whereis(grpcbox_services_sup:services_sup_name(ListenOpts))).
init(_Args) ->
SupFlags = #{strategy => simple_one_for_one,
intensity => 0,
period => 1},
ChildSpecs = [#{id => grpcbox_services_sup,
start => {grpcbox_services_sup, start_link, []},
type => supervisor,
shutdown => brutal_kill}],
{ok, {SupFlags, ChildSpecs}}.