Current section

Files

Jump to
temporal_sdk src client temporal_sdk_client_sup.erl
Raw

src/client/temporal_sdk_client_sup.erl

-module(temporal_sdk_client_sup).
-behaviour(supervisor).
% elp:ignore W0012 W0040
-moduledoc false.
-export([
start_link/2
]).
-export([
init/1
]).
-spec start_link(
Cluster :: temporal_sdk_cluster:cluster_name(), ClientOpts :: temporal_sdk_client:opts()
) -> supervisor:startlink_ret().
start_link(Cluster, ClientOpts) ->
supervisor:start_link(
{local, temporal_sdk_utils_path:atom_path([?MODULE, Cluster])}, ?MODULE, [
Cluster, ClientOpts
]
).
init([Cluster, ClientOpts]) ->
InitTime = temporal_sdk_telemetry:execute([client, init], #{
cluster => Cluster, opts => ClientOpts
}),
maybe
#{
adapter := Adapter,
pool_size := PoolSize,
grpc_opts := GrpcOpts,
grpc_opts_longpoll := GrpcOptsLongpoll
} ?= ClientOpts,
ok ?= temporal_sdk_grpc_opts:check_opts(GrpcOpts),
ok ?= temporal_sdk_grpc_opts:check_opts(GrpcOptsLongpoll),
ok ?= temporal_sdk_grpc:start_grpc(Cluster, Adapter),
temporal_sdk_telemetry:execute([client, start], #{cluster => Cluster, opts => ClientOpts}),
{ok, {#{strategy => one_for_one}, child_spec(Cluster, PoolSize)}}
else
Err ->
temporal_sdk_telemetry:execute(
[client, exception],
#{cluster => Cluster, opts => ClientOpts, error => Err},
InitTime
),
ignore
end.
child_spec(Cluster, Size) ->
[
#{
id => {temporal_sdk_client, Cluster, I},
start => {temporal_sdk_client, start_link, [Cluster, I]}
}
|| I <- lists:seq(1, Size)
].