Skip to content

Commit

Permalink
update meterprovider to take resource as an argument on start
Browse files Browse the repository at this point in the history
  • Loading branch information
tsloughter committed Apr 4, 2023
1 parent 6d71b71 commit 7ed076c
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 38 deletions.
18 changes: 6 additions & 12 deletions apps/opentelemetry_api_experimental/src/otel_meter_provider.erl
Original file line number Diff line number Diff line change
Expand Up @@ -21,31 +21,25 @@
%%%-------------------------------------------------------------------------
-module(otel_meter_provider).

-export([start/2,
get_meter/3,
-export([get_meter/3,
get_meter/4,
resource/0,
resource/1,
force_flush/0,
force_flush/1]).

-include_lib("opentelemetry_api/include/opentelemetry.hrl").
-include_lib("otel_meter.hrl").

-type meter() :: term().

start(Name, Config) ->
%% SDK must register a simple one for one supervisor of tracer providers
%% under the name `otel_meter_provider_sup'
%% {ok, _} = otel_meter_provider_sup:start_child(default, Config),
supervisor:start_child(otel_meter_provider_sup, [Name, Config]).

-spec get_meter(Name, Vsn, SchemaUrl) -> Meter when
Name :: atom(),
Vsn :: unicode:chardata() | undefined,
SchemaUrl :: uri_string:uri_string() | undefined,
Meter:: meter().
get_meter(Name, Vsn, SchemaUrl) ->
get_meter(?MODULE, Name, Vsn, SchemaUrl).
get_meter(?GLOBAL_METER_PROVIDER_NAME, Name, Vsn, SchemaUrl).

-spec get_meter(ServerRef, Name, Vsn, SchemaUrl) -> Meter when
ServerRef :: atom() | pid(),
Expand All @@ -63,7 +57,7 @@ get_meter(ServerRef, Name, Vsn, SchemaUrl) ->

-spec resource() -> term() | undefined.
resource() ->
resource(?MODULE).
resource(?GLOBAL_METER_PROVIDER_NAME).

-spec resource(atom() | pid()) -> term() | undefined.
resource(ServerRef) ->
Expand All @@ -76,12 +70,12 @@ resource(ServerRef) ->

-spec force_flush() -> ok | {error, term()} | timeout.
force_flush() ->
force_flush(?MODULE).
force_flush(?GLOBAL_METER_PROVIDER_NAME).

-spec force_flush(atom() | pid()) -> ok | {error, term()} | timeout.
force_flush(ServerRef) ->
try
gen_server:call(ServerRef, force_flush)
gen_server:call(maybe_to_reg_name(ServerRef), force_flush)
catch exit:{noproc, _} ->
%% ignore because likely no SDK has been included and started
ok
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
-behaviour(application).

-export([start/2,
prep_stop/1,
stop/1]).

-include_lib("opentelemetry_api_experimental/include/otel_meter.hrl").
Expand All @@ -19,18 +18,11 @@ start(_StartType, _StartArgs) ->

{ok, Pid} = opentelemetry_experimental_sup:start_link(Config),

{ok, _} = opentelemetry_experimental:start_meter_provider(?GLOBAL_METER_PROVIDER_NAME, Config),
Resource = otel_resource_detector:get_resource(),
{ok, _} = otel_meter_provider_sup:start(?GLOBAL_METER_PROVIDER_NAME, Resource, Config),

{ok, Pid}.

%% called before the supervision tree is shutdown.
prep_stop(_State) ->
%% on application stop set meter to the noop implementation.
%% This is to ensure no crashes if the sdk isn't the last
%% thing to shutdown or if the opentelemetry application crashed.
opentelemetry_experimental:set_default_meter({otel_meter_noop, []}),
ok.

stop(_State) ->
ok.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
-behaviour(supervisor).

-export([start_link/0,
start_child/2]).
start/3]).

-export([init/1]).

Expand All @@ -29,8 +29,8 @@
start_link() ->
supervisor:start_link({local, ?SERVER}, ?MODULE, []).

start_child(Name, Opts) ->
supervisor:start_child(?SERVER, [Name, Opts]).
start(Name, Resource, Opts) ->
supervisor:start_child(?SERVER, [Name, Resource, Opts]).

init([]) ->
SupFlags = #{strategy => simple_one_for_one,
Expand Down
12 changes: 5 additions & 7 deletions apps/opentelemetry_experimental/src/otel_meter_server.erl
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@

-behaviour(gen_server).

-export([start_link/3,
-export([start_link/4,
add_metric_reader/4,
add_metric_reader/5,
add_instrument/1,
Expand Down Expand Up @@ -105,9 +105,9 @@
resource :: otel_resource:t()
}).

-spec start_link(atom(), atom(), otel_configuration:t()) -> {ok, pid()} | ignore | {error, term()}.
start_link(Name, RegName, Config) ->
gen_server:start_link({local, RegName}, ?MODULE, [Name, RegName, Config], []).
-spec start_link(atom(), atom(), otel_resource:t(), otel_configuration:t()) -> {ok, pid()} | ignore | {error, term()}.
start_link(Name, RegName, Resource, Config) ->
gen_server:start_link({local, RegName}, ?MODULE, [Name, RegName, Resource, Config], []).

-spec add_instrument(otel_instrument:t()) -> boolean().
add_instrument(Instrument) ->
Expand Down Expand Up @@ -162,14 +162,12 @@ force_flush() ->
force_flush(Provider) ->
gen_server:call(Provider, force_flush).

init([Name, RegName, Config]) ->
init([Name, RegName, Resource, Config]) ->
InstrumentsTab = instruments_tab(RegName),
CallbacksTab = callbacks_tab(RegName),
ViewAggregationsTab = view_aggregations_tab(RegName),
MetricsTab = metrics_tab(RegName),

Resource = otel_resource_detector:get_resource(),

Meter = #meter{module=otel_meter_default,
instruments_tab=InstrumentsTab,
provider=RegName,
Expand Down
10 changes: 5 additions & 5 deletions apps/opentelemetry_experimental/src/otel_meter_server_sup.erl
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,15 @@

-behaviour(supervisor).

-export([start_link/2,
-export([start_link/3,
provider_pid/1]).

-export([init/1]).

-include_lib("opentelemetry_api/include/opentelemetry.hrl").

start_link(Name, Opts) ->
supervisor:start_link(?MODULE, [Name, Opts]).
start_link(Name, Resource, Opts) ->
supervisor:start_link(?MODULE, [Name, Resource, Opts]).

-dialyzer({nowarn_function, provider_pid/1}).
-spec provider_pid(supervisor:sup_ref()) -> pid() | restarting | undefined.
Expand All @@ -40,7 +40,7 @@ provider_pid(SupPid) ->
undefined
end.

init([Name, Opts]) ->
init([Name, Resource, Opts]) ->
SupFlags = #{strategy => rest_for_one, %% restart the readers if the server dies
intensity => 1,
period => 5},
Expand All @@ -56,7 +56,7 @@ init([Name, Opts]) ->

ProviderShutdownTimeout = maps:get(meter_provider_shutdown_timeout, Opts, 5000),
MeterServer = #{id => otel_meter_server,
start => {otel_meter_server, start_link, [Name, MeterServerRegName, Opts]},
start => {otel_meter_server, start_link, [Name, MeterServerRegName, Resource, Opts]},
restart => permanent,
shutdown => ProviderShutdownTimeout,
type => worker,
Expand Down
10 changes: 9 additions & 1 deletion apps/opentelemetry_experimental/test/otel_metrics_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ all() ->
kill_reader, kill_server, observable_counter, observable_updown_counter, observable_gauge,
multi_instrument_callback, using_macros, float_counter, float_updown_counter, float_histogram,
sync_filtered_attributes, async_filtered_attributes, delta_observable_counter,
bad_observable_return
bad_observable_return, default_resource
].

init_per_suite(Config) ->
Expand Down Expand Up @@ -185,6 +185,14 @@ end_per_testcase(_, _Config) ->
application:unload(opentelemetry_experimental),
ok.

default_resource(_Config) ->
Resource = otel_meter_provider:resource(),

?assertMatch(#{'process.executable.name' := <<"erl">>},
otel_attributes:map(otel_resource:attributes(Resource))),

ok.

using_macros(_Config) ->
DefaultMeter = otel_meter_default,

Expand Down

0 comments on commit 7ed076c

Please sign in to comment.