Remove telemetry registry, fix broken log, update tests (#207)
* Remove telemetry registry, fix broken log, update tests * Fix rebar and otp versions * Specific rebar3 * Roll back dialyxir
This commit is contained in:
parent
02202fb780
commit
98d0bab4a9
|
@ -13,7 +13,7 @@
|
||||||
"1.11.4"
|
"1.11.4"
|
||||||
],
|
],
|
||||||
"rebar3_version": [
|
"rebar3_version": [
|
||||||
"3.20"
|
"3.20.0"
|
||||||
],
|
],
|
||||||
"os": [
|
"os": [
|
||||||
"ubuntu-20.04"
|
"ubuntu-20.04"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"otp_version": ["26.0.2", "25.3.5.2", "24.3.4.13", "23.3.4.19"],
|
"otp_version": ["26.0.2", "25.3.2.6", "24.3.4.13", "23.3.4.19"],
|
||||||
"rebar3_version": ["3.20"],
|
"rebar3_version": ["3.20.0"],
|
||||||
"os": ["ubuntu-20.04"]
|
"os": ["ubuntu-20.04"]
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
.rebar3
|
|
||||||
_*
|
|
||||||
.eunit
|
|
||||||
*.o
|
|
||||||
*.beam
|
|
||||||
*.plt
|
|
||||||
*.swp
|
|
||||||
*.swo
|
|
||||||
.erlang.cookie
|
|
||||||
ebin
|
|
||||||
log
|
|
||||||
erl_crash.dump
|
|
||||||
.rebar
|
|
||||||
logs
|
|
||||||
_build
|
|
||||||
.idea
|
|
||||||
*.iml
|
|
||||||
rebar3.crashdump
|
|
||||||
*~
|
|
||||||
!_checkouts
|
|
|
@ -1,191 +0,0 @@
|
||||||
Apache License
|
|
||||||
Version 2.0, January 2004
|
|
||||||
http://www.apache.org/licenses/
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
||||||
|
|
||||||
1. Definitions.
|
|
||||||
|
|
||||||
"License" shall mean the terms and conditions for use, reproduction,
|
|
||||||
and distribution as defined by Sections 1 through 9 of this document.
|
|
||||||
|
|
||||||
"Licensor" shall mean the copyright owner or entity authorized by
|
|
||||||
the copyright owner that is granting the License.
|
|
||||||
|
|
||||||
"Legal Entity" shall mean the union of the acting entity and all
|
|
||||||
other entities that control, are controlled by, or are under common
|
|
||||||
control with that entity. For the purposes of this definition,
|
|
||||||
"control" means (i) the power, direct or indirect, to cause the
|
|
||||||
direction or management of such entity, whether by contract or
|
|
||||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
||||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
||||||
|
|
||||||
"You" (or "Your") shall mean an individual or Legal Entity
|
|
||||||
exercising permissions granted by this License.
|
|
||||||
|
|
||||||
"Source" form shall mean the preferred form for making modifications,
|
|
||||||
including but not limited to software source code, documentation
|
|
||||||
source, and configuration files.
|
|
||||||
|
|
||||||
"Object" form shall mean any form resulting from mechanical
|
|
||||||
transformation or translation of a Source form, including but
|
|
||||||
not limited to compiled object code, generated documentation,
|
|
||||||
and conversions to other media types.
|
|
||||||
|
|
||||||
"Work" shall mean the work of authorship, whether in Source or
|
|
||||||
Object form, made available under the License, as indicated by a
|
|
||||||
copyright notice that is included in or attached to the work
|
|
||||||
(an example is provided in the Appendix below).
|
|
||||||
|
|
||||||
"Derivative Works" shall mean any work, whether in Source or Object
|
|
||||||
form, that is based on (or derived from) the Work and for which the
|
|
||||||
editorial revisions, annotations, elaborations, or other modifications
|
|
||||||
represent, as a whole, an original work of authorship. For the purposes
|
|
||||||
of this License, Derivative Works shall not include works that remain
|
|
||||||
separable from, or merely link (or bind by name) to the interfaces of,
|
|
||||||
the Work and Derivative Works thereof.
|
|
||||||
|
|
||||||
"Contribution" shall mean any work of authorship, including
|
|
||||||
the original version of the Work and any modifications or additions
|
|
||||||
to that Work or Derivative Works thereof, that is intentionally
|
|
||||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
||||||
or by an individual or Legal Entity authorized to submit on behalf of
|
|
||||||
the copyright owner. For the purposes of this definition, "submitted"
|
|
||||||
means any form of electronic, verbal, or written communication sent
|
|
||||||
to the Licensor or its representatives, including but not limited to
|
|
||||||
communication on electronic mailing lists, source code control systems,
|
|
||||||
and issue tracking systems that are managed by, or on behalf of, the
|
|
||||||
Licensor for the purpose of discussing and improving the Work, but
|
|
||||||
excluding communication that is conspicuously marked or otherwise
|
|
||||||
designated in writing by the copyright owner as "Not a Contribution."
|
|
||||||
|
|
||||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
||||||
on behalf of whom a Contribution has been received by Licensor and
|
|
||||||
subsequently incorporated within the Work.
|
|
||||||
|
|
||||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
copyright license to reproduce, prepare Derivative Works of,
|
|
||||||
publicly display, publicly perform, sublicense, and distribute the
|
|
||||||
Work and such Derivative Works in Source or Object form.
|
|
||||||
|
|
||||||
3. Grant of Patent License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
(except as stated in this section) patent license to make, have made,
|
|
||||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
||||||
where such license applies only to those patent claims licensable
|
|
||||||
by such Contributor that are necessarily infringed by their
|
|
||||||
Contribution(s) alone or by combination of their Contribution(s)
|
|
||||||
with the Work to which such Contribution(s) was submitted. If You
|
|
||||||
institute patent litigation against any entity (including a
|
|
||||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
||||||
or a Contribution incorporated within the Work constitutes direct
|
|
||||||
or contributory patent infringement, then any patent licenses
|
|
||||||
granted to You under this License for that Work shall terminate
|
|
||||||
as of the date such litigation is filed.
|
|
||||||
|
|
||||||
4. Redistribution. You may reproduce and distribute copies of the
|
|
||||||
Work or Derivative Works thereof in any medium, with or without
|
|
||||||
modifications, and in Source or Object form, provided that You
|
|
||||||
meet the following conditions:
|
|
||||||
|
|
||||||
(a) You must give any other recipients of the Work or
|
|
||||||
Derivative Works a copy of this License; and
|
|
||||||
|
|
||||||
(b) You must cause any modified files to carry prominent notices
|
|
||||||
stating that You changed the files; and
|
|
||||||
|
|
||||||
(c) You must retain, in the Source form of any Derivative Works
|
|
||||||
that You distribute, all copyright, patent, trademark, and
|
|
||||||
attribution notices from the Source form of the Work,
|
|
||||||
excluding those notices that do not pertain to any part of
|
|
||||||
the Derivative Works; and
|
|
||||||
|
|
||||||
(d) If the Work includes a "NOTICE" text file as part of its
|
|
||||||
distribution, then any Derivative Works that You distribute must
|
|
||||||
include a readable copy of the attribution notices contained
|
|
||||||
within such NOTICE file, excluding those notices that do not
|
|
||||||
pertain to any part of the Derivative Works, in at least one
|
|
||||||
of the following places: within a NOTICE text file distributed
|
|
||||||
as part of the Derivative Works; within the Source form or
|
|
||||||
documentation, if provided along with the Derivative Works; or,
|
|
||||||
within a display generated by the Derivative Works, if and
|
|
||||||
wherever such third-party notices normally appear. The contents
|
|
||||||
of the NOTICE file are for informational purposes only and
|
|
||||||
do not modify the License. You may add Your own attribution
|
|
||||||
notices within Derivative Works that You distribute, alongside
|
|
||||||
or as an addendum to the NOTICE text from the Work, provided
|
|
||||||
that such additional attribution notices cannot be construed
|
|
||||||
as modifying the License.
|
|
||||||
|
|
||||||
You may add Your own copyright statement to Your modifications and
|
|
||||||
may provide additional or different license terms and conditions
|
|
||||||
for use, reproduction, or distribution of Your modifications, or
|
|
||||||
for any such Derivative Works as a whole, provided Your use,
|
|
||||||
reproduction, and distribution of the Work otherwise complies with
|
|
||||||
the conditions stated in this License.
|
|
||||||
|
|
||||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
||||||
any Contribution intentionally submitted for inclusion in the Work
|
|
||||||
by You to the Licensor shall be under the terms and conditions of
|
|
||||||
this License, without any additional terms or conditions.
|
|
||||||
Notwithstanding the above, nothing herein shall supersede or modify
|
|
||||||
the terms of any separate license agreement you may have executed
|
|
||||||
with Licensor regarding such Contributions.
|
|
||||||
|
|
||||||
6. Trademarks. This License does not grant permission to use the trade
|
|
||||||
names, trademarks, service marks, or product names of the Licensor,
|
|
||||||
except as required for reasonable and customary use in describing the
|
|
||||||
origin of the Work and reproducing the content of the NOTICE file.
|
|
||||||
|
|
||||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
||||||
agreed to in writing, Licensor provides the Work (and each
|
|
||||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
||||||
implied, including, without limitation, any warranties or conditions
|
|
||||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
||||||
appropriateness of using or redistributing the Work and assume any
|
|
||||||
risks associated with Your exercise of permissions under this License.
|
|
||||||
|
|
||||||
8. Limitation of Liability. In no event and under no legal theory,
|
|
||||||
whether in tort (including negligence), contract, or otherwise,
|
|
||||||
unless required by applicable law (such as deliberate and grossly
|
|
||||||
negligent acts) or agreed to in writing, shall any Contributor be
|
|
||||||
liable to You for damages, including any direct, indirect, special,
|
|
||||||
incidental, or consequential damages of any character arising as a
|
|
||||||
result of this License or out of the use or inability to use the
|
|
||||||
Work (including but not limited to damages for loss of goodwill,
|
|
||||||
work stoppage, computer failure or malfunction, or any and all
|
|
||||||
other commercial damages or losses), even if such Contributor
|
|
||||||
has been advised of the possibility of such damages.
|
|
||||||
|
|
||||||
9. Accepting Warranty or Additional Liability. While redistributing
|
|
||||||
the Work or Derivative Works thereof, You may choose to offer,
|
|
||||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
||||||
or other liability obligations and/or rights consistent with this
|
|
||||||
License. However, in accepting such obligations, You may act only
|
|
||||||
on Your own behalf and on Your sole responsibility, not on behalf
|
|
||||||
of any other Contributor, and only if You agree to indemnify,
|
|
||||||
defend, and hold each Contributor harmless for any liability
|
|
||||||
incurred by, or claims asserted against, such Contributor by reason
|
|
||||||
of your accepting any such warranty or additional liability.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
Copyright 2020, Bryan Naegele <bryan@fourthtime.com>.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
test_app
|
|
||||||
=====
|
|
||||||
|
|
||||||
An OTP application
|
|
||||||
|
|
||||||
Build
|
|
||||||
-----
|
|
||||||
|
|
||||||
$ rebar3 compile
|
|
|
@ -1,33 +0,0 @@
|
||||||
{erl_opts, [debug_info]}.
|
|
||||||
{deps, [
|
|
||||||
{test_child_app, "~> 0.1"}
|
|
||||||
]}.
|
|
||||||
|
|
||||||
{profiles, [
|
|
||||||
{test, [{erl_opts, [nowarn_export_all]},
|
|
||||||
{deps, [
|
|
||||||
{test_child_app, "~> 0.1"},
|
|
||||||
{telemetry, "~> 1.0"}
|
|
||||||
]},
|
|
||||||
%% create junit xml for circleci
|
|
||||||
{ct_opts, [{ct_hooks, [cth_surefire]}]},
|
|
||||||
{cover_enabled, true},
|
|
||||||
{cover_opts, [verbose]},
|
|
||||||
{paths, ["src", "test/support"]},
|
|
||||||
%% convert to data codecov understands
|
|
||||||
{plugins, [covertool]},
|
|
||||||
{covertool, [{coverdata_files, ["ct.coverdata"]}]}
|
|
||||||
]},
|
|
||||||
{docs, [{edoc_opts, [{preprocess, true},
|
|
||||||
{title, "Test App"}]}
|
|
||||||
]}
|
|
||||||
]}.
|
|
||||||
|
|
||||||
{shell, [
|
|
||||||
% {config, "config/sys.config"},
|
|
||||||
{apps, [test_app]}
|
|
||||||
]}.
|
|
||||||
|
|
||||||
%% take out warnings for unused exported functions
|
|
||||||
{xref_checks,[undefined_function_calls, undefined_functions, locals_not_used,
|
|
||||||
deprecated_function_calls, deprecated_functions]}.
|
|
|
@ -1 +0,0 @@
|
||||||
[].
|
|
|
@ -1,16 +0,0 @@
|
||||||
{application, test_app,
|
|
||||||
[{description, "An OTP application"},
|
|
||||||
{vsn, "0.1.0"},
|
|
||||||
{registered, []},
|
|
||||||
{mod, {test_app_app, []}},
|
|
||||||
{applications,
|
|
||||||
[kernel,
|
|
||||||
stdlib,
|
|
||||||
test_child_app
|
|
||||||
]},
|
|
||||||
{env,[]},
|
|
||||||
{modules, []},
|
|
||||||
|
|
||||||
{licenses, ["Apache 2.0"]},
|
|
||||||
{links, []}
|
|
||||||
]}.
|
|
|
@ -1,82 +0,0 @@
|
||||||
-module(test_app).
|
|
||||||
|
|
||||||
-export([handler/1]).
|
|
||||||
|
|
||||||
-telemetry_event #{
|
|
||||||
event => [test_app, handler, start],
|
|
||||||
description => <<"Emitted at the start of the handler">>,
|
|
||||||
measurements => <<"#{system_time => non_neg_integer()}">>,
|
|
||||||
metadata => <<"#{}">>
|
|
||||||
}.
|
|
||||||
-telemetry_event #{
|
|
||||||
event => [test_app, handler, stop],
|
|
||||||
description => <<"Emitted at the end of the handler">>,
|
|
||||||
measurements => <<"#{duration => non_neg_integer()}">>,
|
|
||||||
metadata => <<"#{}">>
|
|
||||||
}.
|
|
||||||
-telemetry_event #{
|
|
||||||
event => [test_app, handler, exception],
|
|
||||||
description => <<"The handler raised an exception">>,
|
|
||||||
measurements => <<"#{duration => non_neg_integer()}">>,
|
|
||||||
metadata => <<"#{kind => atom(), reason => atom(), stacktrace => term()}">>
|
|
||||||
}.
|
|
||||||
|
|
||||||
-telemetry_event #{
|
|
||||||
event => [test_app, nested_span, start],
|
|
||||||
description => <<"Emitted at the start of the handler">>,
|
|
||||||
measurements => <<"#{system_time => non_neg_integer()}">>,
|
|
||||||
metadata => <<"#{}">>
|
|
||||||
}.
|
|
||||||
-telemetry_event #{
|
|
||||||
event => [test_app, nested_span, stop],
|
|
||||||
description => <<"Emitted at the end of the handler">>,
|
|
||||||
measurements => <<"#{duration => non_neg_integer()}">>,
|
|
||||||
metadata => <<"#{}">>
|
|
||||||
}.
|
|
||||||
-telemetry_event #{
|
|
||||||
event => [test_app, nested_span, exception],
|
|
||||||
description => <<"The handler raised an exception">>,
|
|
||||||
measurements => <<"#{duration => non_neg_integer()}">>,
|
|
||||||
metadata => <<"#{kind => atom(), reason => atom(), stacktrace => term()}">>
|
|
||||||
}.
|
|
||||||
|
|
||||||
|
|
||||||
-telemetry_event #{
|
|
||||||
event => [test_app, only, stop],
|
|
||||||
description => <<"The handler raised an exception">>,
|
|
||||||
measurements => <<"#{duration => non_neg_integer()}">>,
|
|
||||||
metadata => <<"#{kind => atom(), reason => atom(), stacktrace => term()}">>
|
|
||||||
}.
|
|
||||||
|
|
||||||
-telemetry_event #{
|
|
||||||
event => [test_app, cache, miss],
|
|
||||||
description => <<"Emitted at the start of the handler">>,
|
|
||||||
measurements => <<"#{system_time => non_neg_integer()}">>,
|
|
||||||
metadata => <<"#{}">>
|
|
||||||
}.
|
|
||||||
-telemetry_event #{
|
|
||||||
event => [test_app, cache, hit],
|
|
||||||
description => <<"Emitted at the end of the handler">>,
|
|
||||||
measurements => <<"#{duration => non_neg_integer()}">>,
|
|
||||||
metadata => <<"#{}">>
|
|
||||||
}.
|
|
||||||
|
|
||||||
handler(Args) ->
|
|
||||||
_ = telemetry:span(
|
|
||||||
[test_app, handler],
|
|
||||||
#{},
|
|
||||||
fun() ->
|
|
||||||
case Args of
|
|
||||||
raise_exception ->
|
|
||||||
binary_to_list("heh, already a list");
|
|
||||||
_ -> {nested_span(), #{}}
|
|
||||||
end
|
|
||||||
end).
|
|
||||||
|
|
||||||
nested_span() ->
|
|
||||||
_ = telemetry:span(
|
|
||||||
[test_app, nested_span],
|
|
||||||
#{},
|
|
||||||
fun() ->
|
|
||||||
{ok, #{}}
|
|
||||||
end).
|
|
|
@ -1,26 +0,0 @@
|
||||||
%%%-------------------------------------------------------------------
|
|
||||||
%% @doc test_app public API
|
|
||||||
%% @end
|
|
||||||
%%%-------------------------------------------------------------------
|
|
||||||
|
|
||||||
-module(test_app_app).
|
|
||||||
|
|
||||||
-behaviour(application).
|
|
||||||
|
|
||||||
%% Application callbacks
|
|
||||||
-export([start/2, stop/1]).
|
|
||||||
|
|
||||||
%%====================================================================
|
|
||||||
%% API
|
|
||||||
%%====================================================================
|
|
||||||
|
|
||||||
start(_StartType, _StartArgs) ->
|
|
||||||
test_app_sup:start_link().
|
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
|
||||||
stop(_State) ->
|
|
||||||
ok.
|
|
||||||
|
|
||||||
%%====================================================================
|
|
||||||
%% Internal functions
|
|
||||||
%%====================================================================
|
|
|
@ -1,38 +0,0 @@
|
||||||
%%%-------------------------------------------------------------------
|
|
||||||
%% @doc test_app top level supervisor.
|
|
||||||
%% @end
|
|
||||||
%%%-------------------------------------------------------------------
|
|
||||||
|
|
||||||
-module(test_app_sup).
|
|
||||||
|
|
||||||
-behaviour(supervisor).
|
|
||||||
|
|
||||||
%% API
|
|
||||||
-export([start_link/0]).
|
|
||||||
|
|
||||||
%% Supervisor callbacks
|
|
||||||
-export([init/1]).
|
|
||||||
|
|
||||||
-define(SERVER, ?MODULE).
|
|
||||||
|
|
||||||
%%====================================================================
|
|
||||||
%% API functions
|
|
||||||
%%====================================================================
|
|
||||||
|
|
||||||
start_link() ->
|
|
||||||
supervisor:start_link({local, ?SERVER}, ?MODULE, []).
|
|
||||||
|
|
||||||
%%====================================================================
|
|
||||||
%% Supervisor callbacks
|
|
||||||
%%====================================================================
|
|
||||||
|
|
||||||
%% Child :: #{id => Id, start => {M, F, A}}
|
|
||||||
%% Optional keys are restart, shutdown, type, modules.
|
|
||||||
%% Before OTP 18 tuples must be used to specify a child. e.g.
|
|
||||||
%% Child :: {Id,StartFunc,Restart,Shutdown,Type,Modules}
|
|
||||||
init([]) ->
|
|
||||||
{ok, {{one_for_all, 0, 1}, []}}.
|
|
||||||
|
|
||||||
%%====================================================================
|
|
||||||
%% Internal functions
|
|
||||||
%%====================================================================
|
|
|
@ -1,19 +0,0 @@
|
||||||
.rebar3
|
|
||||||
_*
|
|
||||||
.eunit
|
|
||||||
*.o
|
|
||||||
*.beam
|
|
||||||
*.plt
|
|
||||||
*.swp
|
|
||||||
*.swo
|
|
||||||
.erlang.cookie
|
|
||||||
ebin
|
|
||||||
log
|
|
||||||
erl_crash.dump
|
|
||||||
.rebar
|
|
||||||
logs
|
|
||||||
_build
|
|
||||||
.idea
|
|
||||||
*.iml
|
|
||||||
rebar3.crashdump
|
|
||||||
*~
|
|
|
@ -1,191 +0,0 @@
|
||||||
Apache License
|
|
||||||
Version 2.0, January 2004
|
|
||||||
http://www.apache.org/licenses/
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
||||||
|
|
||||||
1. Definitions.
|
|
||||||
|
|
||||||
"License" shall mean the terms and conditions for use, reproduction,
|
|
||||||
and distribution as defined by Sections 1 through 9 of this document.
|
|
||||||
|
|
||||||
"Licensor" shall mean the copyright owner or entity authorized by
|
|
||||||
the copyright owner that is granting the License.
|
|
||||||
|
|
||||||
"Legal Entity" shall mean the union of the acting entity and all
|
|
||||||
other entities that control, are controlled by, or are under common
|
|
||||||
control with that entity. For the purposes of this definition,
|
|
||||||
"control" means (i) the power, direct or indirect, to cause the
|
|
||||||
direction or management of such entity, whether by contract or
|
|
||||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
||||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
||||||
|
|
||||||
"You" (or "Your") shall mean an individual or Legal Entity
|
|
||||||
exercising permissions granted by this License.
|
|
||||||
|
|
||||||
"Source" form shall mean the preferred form for making modifications,
|
|
||||||
including but not limited to software source code, documentation
|
|
||||||
source, and configuration files.
|
|
||||||
|
|
||||||
"Object" form shall mean any form resulting from mechanical
|
|
||||||
transformation or translation of a Source form, including but
|
|
||||||
not limited to compiled object code, generated documentation,
|
|
||||||
and conversions to other media types.
|
|
||||||
|
|
||||||
"Work" shall mean the work of authorship, whether in Source or
|
|
||||||
Object form, made available under the License, as indicated by a
|
|
||||||
copyright notice that is included in or attached to the work
|
|
||||||
(an example is provided in the Appendix below).
|
|
||||||
|
|
||||||
"Derivative Works" shall mean any work, whether in Source or Object
|
|
||||||
form, that is based on (or derived from) the Work and for which the
|
|
||||||
editorial revisions, annotations, elaborations, or other modifications
|
|
||||||
represent, as a whole, an original work of authorship. For the purposes
|
|
||||||
of this License, Derivative Works shall not include works that remain
|
|
||||||
separable from, or merely link (or bind by name) to the interfaces of,
|
|
||||||
the Work and Derivative Works thereof.
|
|
||||||
|
|
||||||
"Contribution" shall mean any work of authorship, including
|
|
||||||
the original version of the Work and any modifications or additions
|
|
||||||
to that Work or Derivative Works thereof, that is intentionally
|
|
||||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
||||||
or by an individual or Legal Entity authorized to submit on behalf of
|
|
||||||
the copyright owner. For the purposes of this definition, "submitted"
|
|
||||||
means any form of electronic, verbal, or written communication sent
|
|
||||||
to the Licensor or its representatives, including but not limited to
|
|
||||||
communication on electronic mailing lists, source code control systems,
|
|
||||||
and issue tracking systems that are managed by, or on behalf of, the
|
|
||||||
Licensor for the purpose of discussing and improving the Work, but
|
|
||||||
excluding communication that is conspicuously marked or otherwise
|
|
||||||
designated in writing by the copyright owner as "Not a Contribution."
|
|
||||||
|
|
||||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
||||||
on behalf of whom a Contribution has been received by Licensor and
|
|
||||||
subsequently incorporated within the Work.
|
|
||||||
|
|
||||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
copyright license to reproduce, prepare Derivative Works of,
|
|
||||||
publicly display, publicly perform, sublicense, and distribute the
|
|
||||||
Work and such Derivative Works in Source or Object form.
|
|
||||||
|
|
||||||
3. Grant of Patent License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
(except as stated in this section) patent license to make, have made,
|
|
||||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
||||||
where such license applies only to those patent claims licensable
|
|
||||||
by such Contributor that are necessarily infringed by their
|
|
||||||
Contribution(s) alone or by combination of their Contribution(s)
|
|
||||||
with the Work to which such Contribution(s) was submitted. If You
|
|
||||||
institute patent litigation against any entity (including a
|
|
||||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
||||||
or a Contribution incorporated within the Work constitutes direct
|
|
||||||
or contributory patent infringement, then any patent licenses
|
|
||||||
granted to You under this License for that Work shall terminate
|
|
||||||
as of the date such litigation is filed.
|
|
||||||
|
|
||||||
4. Redistribution. You may reproduce and distribute copies of the
|
|
||||||
Work or Derivative Works thereof in any medium, with or without
|
|
||||||
modifications, and in Source or Object form, provided that You
|
|
||||||
meet the following conditions:
|
|
||||||
|
|
||||||
(a) You must give any other recipients of the Work or
|
|
||||||
Derivative Works a copy of this License; and
|
|
||||||
|
|
||||||
(b) You must cause any modified files to carry prominent notices
|
|
||||||
stating that You changed the files; and
|
|
||||||
|
|
||||||
(c) You must retain, in the Source form of any Derivative Works
|
|
||||||
that You distribute, all copyright, patent, trademark, and
|
|
||||||
attribution notices from the Source form of the Work,
|
|
||||||
excluding those notices that do not pertain to any part of
|
|
||||||
the Derivative Works; and
|
|
||||||
|
|
||||||
(d) If the Work includes a "NOTICE" text file as part of its
|
|
||||||
distribution, then any Derivative Works that You distribute must
|
|
||||||
include a readable copy of the attribution notices contained
|
|
||||||
within such NOTICE file, excluding those notices that do not
|
|
||||||
pertain to any part of the Derivative Works, in at least one
|
|
||||||
of the following places: within a NOTICE text file distributed
|
|
||||||
as part of the Derivative Works; within the Source form or
|
|
||||||
documentation, if provided along with the Derivative Works; or,
|
|
||||||
within a display generated by the Derivative Works, if and
|
|
||||||
wherever such third-party notices normally appear. The contents
|
|
||||||
of the NOTICE file are for informational purposes only and
|
|
||||||
do not modify the License. You may add Your own attribution
|
|
||||||
notices within Derivative Works that You distribute, alongside
|
|
||||||
or as an addendum to the NOTICE text from the Work, provided
|
|
||||||
that such additional attribution notices cannot be construed
|
|
||||||
as modifying the License.
|
|
||||||
|
|
||||||
You may add Your own copyright statement to Your modifications and
|
|
||||||
may provide additional or different license terms and conditions
|
|
||||||
for use, reproduction, or distribution of Your modifications, or
|
|
||||||
for any such Derivative Works as a whole, provided Your use,
|
|
||||||
reproduction, and distribution of the Work otherwise complies with
|
|
||||||
the conditions stated in this License.
|
|
||||||
|
|
||||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
||||||
any Contribution intentionally submitted for inclusion in the Work
|
|
||||||
by You to the Licensor shall be under the terms and conditions of
|
|
||||||
this License, without any additional terms or conditions.
|
|
||||||
Notwithstanding the above, nothing herein shall supersede or modify
|
|
||||||
the terms of any separate license agreement you may have executed
|
|
||||||
with Licensor regarding such Contributions.
|
|
||||||
|
|
||||||
6. Trademarks. This License does not grant permission to use the trade
|
|
||||||
names, trademarks, service marks, or product names of the Licensor,
|
|
||||||
except as required for reasonable and customary use in describing the
|
|
||||||
origin of the Work and reproducing the content of the NOTICE file.
|
|
||||||
|
|
||||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
||||||
agreed to in writing, Licensor provides the Work (and each
|
|
||||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
||||||
implied, including, without limitation, any warranties or conditions
|
|
||||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
||||||
appropriateness of using or redistributing the Work and assume any
|
|
||||||
risks associated with Your exercise of permissions under this License.
|
|
||||||
|
|
||||||
8. Limitation of Liability. In no event and under no legal theory,
|
|
||||||
whether in tort (including negligence), contract, or otherwise,
|
|
||||||
unless required by applicable law (such as deliberate and grossly
|
|
||||||
negligent acts) or agreed to in writing, shall any Contributor be
|
|
||||||
liable to You for damages, including any direct, indirect, special,
|
|
||||||
incidental, or consequential damages of any character arising as a
|
|
||||||
result of this License or out of the use or inability to use the
|
|
||||||
Work (including but not limited to damages for loss of goodwill,
|
|
||||||
work stoppage, computer failure or malfunction, or any and all
|
|
||||||
other commercial damages or losses), even if such Contributor
|
|
||||||
has been advised of the possibility of such damages.
|
|
||||||
|
|
||||||
9. Accepting Warranty or Additional Liability. While redistributing
|
|
||||||
the Work or Derivative Works thereof, You may choose to offer,
|
|
||||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
||||||
or other liability obligations and/or rights consistent with this
|
|
||||||
License. However, in accepting such obligations, You may act only
|
|
||||||
on Your own behalf and on Your sole responsibility, not on behalf
|
|
||||||
of any other Contributor, and only if You agree to indemnify,
|
|
||||||
defend, and hold each Contributor harmless for any liability
|
|
||||||
incurred by, or claims asserted against, such Contributor by reason
|
|
||||||
of your accepting any such warranty or additional liability.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
Copyright 2020, Bryan Naegele <bryan@fourthtime.com>.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
test_child_app
|
|
||||||
=====
|
|
||||||
|
|
||||||
An OTP application
|
|
||||||
|
|
||||||
Build
|
|
||||||
-----
|
|
||||||
|
|
||||||
$ rebar3 compile
|
|
|
@ -1,7 +0,0 @@
|
||||||
{erl_opts, [debug_info]}.
|
|
||||||
{deps, []}.
|
|
||||||
|
|
||||||
{shell, [
|
|
||||||
% {config, "config/sys.config"},
|
|
||||||
{apps, [test_child_app]}
|
|
||||||
]}.
|
|
|
@ -1 +0,0 @@
|
||||||
[].
|
|
|
@ -1,15 +0,0 @@
|
||||||
{application, test_child_app,
|
|
||||||
[{description, "An OTP application"},
|
|
||||||
{vsn, "0.1.0"},
|
|
||||||
{registered, []},
|
|
||||||
{mod, {test_child_app_app, []}},
|
|
||||||
{applications,
|
|
||||||
[kernel,
|
|
||||||
stdlib
|
|
||||||
]},
|
|
||||||
{env,[]},
|
|
||||||
{modules, []},
|
|
||||||
|
|
||||||
{licenses, ["Apache 2.0"]},
|
|
||||||
{links, []}
|
|
||||||
]}.
|
|
|
@ -1,27 +0,0 @@
|
||||||
-module(test_child_app).
|
|
||||||
|
|
||||||
-telemetry_event #{
|
|
||||||
event => [test_child_app, extra_long, start],
|
|
||||||
description => <<"Emitted at the start of the handler">>,
|
|
||||||
measurements => <<"#{system_time => non_neg_integer()}">>,
|
|
||||||
metadata => <<"#{}">>
|
|
||||||
}.
|
|
||||||
-telemetry_event #{
|
|
||||||
event => [test_child_app, extra_long, stop],
|
|
||||||
description => <<"Emitted at the end of the handler">>,
|
|
||||||
measurements => <<"#{duration => non_neg_integer()}">>,
|
|
||||||
metadata => <<"#{}">>
|
|
||||||
}.
|
|
||||||
|
|
||||||
-telemetry_event #{
|
|
||||||
event => [test_child_app, cache, hit],
|
|
||||||
description => <<"Emitted at the start of the handler">>,
|
|
||||||
measurements => <<"#{system_time => non_neg_integer()}">>,
|
|
||||||
metadata => <<"#{}">>
|
|
||||||
}.
|
|
||||||
-telemetry_event #{
|
|
||||||
event => [test_child_app, cache, miss],
|
|
||||||
description => <<"Emitted at the end of the handler">>,
|
|
||||||
measurements => <<"#{duration => non_neg_integer()}">>,
|
|
||||||
metadata => <<"#{}">>
|
|
||||||
}.
|
|
|
@ -1,26 +0,0 @@
|
||||||
%%%-------------------------------------------------------------------
|
|
||||||
%% @doc test_child_app public API
|
|
||||||
%% @end
|
|
||||||
%%%-------------------------------------------------------------------
|
|
||||||
|
|
||||||
-module(test_child_app_app).
|
|
||||||
|
|
||||||
-behaviour(application).
|
|
||||||
|
|
||||||
%% Application callbacks
|
|
||||||
-export([start/2, stop/1]).
|
|
||||||
|
|
||||||
%%====================================================================
|
|
||||||
%% API
|
|
||||||
%%====================================================================
|
|
||||||
|
|
||||||
start(_StartType, _StartArgs) ->
|
|
||||||
test_child_app_sup:start_link().
|
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
|
||||||
stop(_State) ->
|
|
||||||
ok.
|
|
||||||
|
|
||||||
%%====================================================================
|
|
||||||
%% Internal functions
|
|
||||||
%%====================================================================
|
|
|
@ -1,38 +0,0 @@
|
||||||
%%%-------------------------------------------------------------------
|
|
||||||
%% @doc test_child_app top level supervisor.
|
|
||||||
%% @end
|
|
||||||
%%%-------------------------------------------------------------------
|
|
||||||
|
|
||||||
-module(test_child_app_sup).
|
|
||||||
|
|
||||||
-behaviour(supervisor).
|
|
||||||
|
|
||||||
%% API
|
|
||||||
-export([start_link/0]).
|
|
||||||
|
|
||||||
%% Supervisor callbacks
|
|
||||||
-export([init/1]).
|
|
||||||
|
|
||||||
-define(SERVER, ?MODULE).
|
|
||||||
|
|
||||||
%%====================================================================
|
|
||||||
%% API functions
|
|
||||||
%%====================================================================
|
|
||||||
|
|
||||||
start_link() ->
|
|
||||||
supervisor:start_link({local, ?SERVER}, ?MODULE, []).
|
|
||||||
|
|
||||||
%%====================================================================
|
|
||||||
%% Supervisor callbacks
|
|
||||||
%%====================================================================
|
|
||||||
|
|
||||||
%% Child :: #{id => Id, start => {M, F, A}}
|
|
||||||
%% Optional keys are restart, shutdown, type, modules.
|
|
||||||
%% Before OTP 18 tuples must be used to specify a child. e.g.
|
|
||||||
%% Child :: {Id,StartFunc,Restart,Shutdown,Type,Modules}
|
|
||||||
init([]) ->
|
|
||||||
{ok, {{one_for_all, 0, 1}, []}}.
|
|
||||||
|
|
||||||
%%====================================================================
|
|
||||||
%% Internal functions
|
|
||||||
%%====================================================================
|
|
|
@ -44,7 +44,7 @@ defmodule OpentelemetryTelemetry.MixProject do
|
||||||
dep when is_atom(dep) -> {dep, ">= 0.0.0"}
|
dep when is_atom(dep) -> {dep, ">= 0.0.0"}
|
||||||
end)
|
end)
|
||||||
|> Enum.concat([
|
|> Enum.concat([
|
||||||
{:dialyxir, "~> 1.1", only: [:dev, :test], runtime: false},
|
{:dialyxir, "~> 1.3.0", only: [:dev, :test], runtime: false},
|
||||||
{:ex_doc, "~> 0.29", only: :dev, runtime: false},
|
{:ex_doc, "~> 0.29", only: :dev, runtime: false},
|
||||||
{:opentelemetry, "~> 1.0", only: [:dev, :test]},
|
{:opentelemetry, "~> 1.0", only: [:dev, :test]},
|
||||||
{:opentelemetry_exporter, "~> 1.0", only: [:dev, :test]}
|
{:opentelemetry_exporter, "~> 1.0", only: [:dev, :test]}
|
||||||
|
|
|
@ -3,25 +3,25 @@
|
||||||
"chatterbox": {:hex, :ts_chatterbox, "0.13.0", "6f059d97bcaa758b8ea6fffe2b3b81362bd06b639d3ea2bb088335511d691ebf", [:rebar3], [{:hpack, "~>0.2.3", [hex: :hpack_erl, repo: "hexpm", optional: false]}], "hexpm", "b93d19104d86af0b3f2566c4cba2a57d2e06d103728246ba1ac6c3c0ff010aa7"},
|
"chatterbox": {:hex, :ts_chatterbox, "0.13.0", "6f059d97bcaa758b8ea6fffe2b3b81362bd06b639d3ea2bb088335511d691ebf", [:rebar3], [{:hpack, "~>0.2.3", [hex: :hpack_erl, repo: "hexpm", optional: false]}], "hexpm", "b93d19104d86af0b3f2566c4cba2a57d2e06d103728246ba1ac6c3c0ff010aa7"},
|
||||||
"cmark": {:hex, :cmark, "0.9.0", "c0e673019e125eb5878b6c5610af919d737e881369e0cd2247c89e767f42c029", [:make, :mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "0cfb4d8888bc801f2decc23eee3b3b756b682dff976d15a46861a596fdb00079"},
|
"cmark": {:hex, :cmark, "0.9.0", "c0e673019e125eb5878b6c5610af919d737e881369e0cd2247c89e767f42c029", [:make, :mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "0cfb4d8888bc801f2decc23eee3b3b756b682dff976d15a46861a596fdb00079"},
|
||||||
"ctx": {:hex, :ctx, "0.6.0", "8ff88b70e6400c4df90142e7f130625b82086077a45364a78d208ed3ed53c7fe", [:rebar3], [], "hexpm", "a14ed2d1b67723dbebbe423b28d7615eb0bdcba6ff28f2d1f1b0a7e1d4aa5fc2"},
|
"ctx": {:hex, :ctx, "0.6.0", "8ff88b70e6400c4df90142e7f130625b82086077a45364a78d208ed3ed53c7fe", [:rebar3], [], "hexpm", "a14ed2d1b67723dbebbe423b28d7615eb0bdcba6ff28f2d1f1b0a7e1d4aa5fc2"},
|
||||||
"dialyxir": {:hex, :dialyxir, "1.2.0", "58344b3e87c2e7095304c81a9ae65cb68b613e28340690dfe1a5597fd08dec37", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "61072136427a851674cab81762be4dbeae7679f85b1272b6d25c3a839aff8463"},
|
"dialyxir": {:hex, :dialyxir, "1.3.0", "fd1672f0922b7648ff9ce7b1b26fcf0ef56dda964a459892ad15f6b4410b5284", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "00b2a4bcd6aa8db9dcb0b38c1225b7277dca9bc370b6438715667071a304696f"},
|
||||||
"earmark": {:hex, :earmark, "1.4.5", "62ffd3bd7722fb7a7b1ecd2419ea0b458c356e7168c1f5d65caf09b4fbdd13c8", [:mix], [], "hexpm", "b7d0e6263d83dc27141a523467799a685965bf8b13b6743413f19a7079843f4f"},
|
"earmark": {:hex, :earmark, "1.4.5", "62ffd3bd7722fb7a7b1ecd2419ea0b458c356e7168c1f5d65caf09b4fbdd13c8", [:mix], [], "hexpm", "b7d0e6263d83dc27141a523467799a685965bf8b13b6743413f19a7079843f4f"},
|
||||||
"earmark_parser": {:hex, :earmark_parser, "1.4.29", "149d50dcb3a93d9f3d6f3ecf18c918fb5a2d3c001b5d3305c926cddfbd33355b", [:mix], [], "hexpm", "4902af1b3eb139016aed210888748db8070b8125c2342ce3dcae4f38dcc63503"},
|
"earmark_parser": {:hex, :earmark_parser, "1.4.35", "437773ca9384edf69830e26e9e7b2e0d22d2596c4a6b17094a3b29f01ea65bb8", [:mix], [], "hexpm", "8652ba3cb85608d0d7aa2d21b45c6fad4ddc9a1f9a1f1b30ca3a246f0acc33f6"},
|
||||||
"elixir_make": {:hex, :elixir_make, "0.6.0", "38349f3e29aff4864352084fc736fa7fa0f2995a819a737554f7ebd28b85aaab", [:mix], [], "hexpm", "d522695b93b7f0b4c0fcb2dfe73a6b905b1c301226a5a55cb42e5b14d509e050"},
|
"elixir_make": {:hex, :elixir_make, "0.6.0", "38349f3e29aff4864352084fc736fa7fa0f2995a819a737554f7ebd28b85aaab", [:mix], [], "hexpm", "d522695b93b7f0b4c0fcb2dfe73a6b905b1c301226a5a55cb42e5b14d509e050"},
|
||||||
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
|
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
|
||||||
"ex_doc": {:hex, :ex_doc, "0.29.0", "4a1cb903ce746aceef9c1f9ae8a6c12b742a5461e6959b9d3b24d813ffbea146", [:mix], [{:earmark_parser, "~> 1.4.19", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "f096adb8bbca677d35d278223361c7792d496b3fc0d0224c9d4bc2f651af5db1"},
|
"ex_doc": {:hex, :ex_doc, "0.30.6", "5f8b54854b240a2b55c9734c4b1d0dd7bdd41f71a095d42a70445c03cf05a281", [:mix], [{:earmark_parser, "~> 1.4.31", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "bd48f2ddacf4e482c727f9293d9498e0881597eae6ddc3d9562bd7923375109f"},
|
||||||
"gproc": {:hex, :gproc, "0.8.0", "cea02c578589c61e5341fce149ea36ccef236cc2ecac8691fba408e7ea77ec2f", [:rebar3], [], "hexpm", "580adafa56463b75263ef5a5df4c86af321f68694e7786cb057fd805d1e2a7de"},
|
"gproc": {:hex, :gproc, "0.8.0", "cea02c578589c61e5341fce149ea36ccef236cc2ecac8691fba408e7ea77ec2f", [:rebar3], [], "hexpm", "580adafa56463b75263ef5a5df4c86af321f68694e7786cb057fd805d1e2a7de"},
|
||||||
"grpcbox": {:hex, :grpcbox, "0.16.0", "b83f37c62d6eeca347b77f9b1ec7e9f62231690cdfeb3a31be07cd4002ba9c82", [:rebar3], [{:acceptor_pool, "~>1.0.0", [hex: :acceptor_pool, repo: "hexpm", optional: false]}, {:chatterbox, "~>0.13.0", [hex: :ts_chatterbox, repo: "hexpm", optional: false]}, {:ctx, "~>0.6.0", [hex: :ctx, repo: "hexpm", optional: false]}, {:gproc, "~>0.8.0", [hex: :gproc, repo: "hexpm", optional: false]}], "hexpm", "294df743ae20a7e030889f00644001370a4f7ce0121f3bbdaf13cf3169c62913"},
|
"grpcbox": {:hex, :grpcbox, "0.16.0", "b83f37c62d6eeca347b77f9b1ec7e9f62231690cdfeb3a31be07cd4002ba9c82", [:rebar3], [{:acceptor_pool, "~>1.0.0", [hex: :acceptor_pool, repo: "hexpm", optional: false]}, {:chatterbox, "~>0.13.0", [hex: :ts_chatterbox, repo: "hexpm", optional: false]}, {:ctx, "~>0.6.0", [hex: :ctx, repo: "hexpm", optional: false]}, {:gproc, "~>0.8.0", [hex: :gproc, repo: "hexpm", optional: false]}], "hexpm", "294df743ae20a7e030889f00644001370a4f7ce0121f3bbdaf13cf3169c62913"},
|
||||||
"hpack": {:hex, :hpack_erl, "0.2.3", "17670f83ff984ae6cd74b1c456edde906d27ff013740ee4d9efaa4f1bf999633", [:rebar3], [], "hexpm", "06f580167c4b8b8a6429040df36cc93bba6d571faeaec1b28816523379cbb23a"},
|
"hpack": {:hex, :hpack_erl, "0.2.3", "17670f83ff984ae6cd74b1c456edde906d27ff013740ee4d9efaa4f1bf999633", [:rebar3], [], "hexpm", "06f580167c4b8b8a6429040df36cc93bba6d571faeaec1b28816523379cbb23a"},
|
||||||
"makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"},
|
"makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"},
|
||||||
"makeup_elixir": {:hex, :makeup_elixir, "0.16.0", "f8c570a0d33f8039513fbccaf7108c5d750f47d8defd44088371191b76492b0b", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "28b2cbdc13960a46ae9a8858c4bebdec3c9a6d7b4b9e7f4ed1502f8159f338e7"},
|
"makeup_elixir": {:hex, :makeup_elixir, "0.16.1", "cc9e3ca312f1cfeccc572b37a09980287e243648108384b97ff2b76e505c3555", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "e127a341ad1b209bd80f7bd1620a15693a9908ed780c3b763bccf7d200c767c6"},
|
||||||
"makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"},
|
"makeup_erlang": {:hex, :makeup_erlang, "0.1.2", "ad87296a092a46e03b7e9b0be7631ddcf64c790fa68a9ef5323b6cbb36affc72", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "f3f5a1ca93ce6e092d92b6d9c049bcda58a3b617a8d888f8e7231c85630e8108"},
|
||||||
"nimble_parsec": {:hex, :nimble_parsec, "1.2.3", "244836e6e3f1200c7f30cb56733fd808744eca61fd182f731eac4af635cc6d0b", [:mix], [], "hexpm", "c8d789e39b9131acf7b99291e93dae60ab48ef14a7ee9d58c6964f59efb570b0"},
|
"nimble_parsec": {:hex, :nimble_parsec, "1.3.1", "2c54013ecf170e249e9291ed0a62e5832f70a476c61da16f6aac6dca0189f2af", [:mix], [], "hexpm", "2682e3c0b2eb58d90c6375fc0cc30bc7be06f365bf72608804fb9cffa5e1b167"},
|
||||||
"opentelemetry": {:hex, :opentelemetry, "1.3.1", "f0a342a74379e3540a634e7047967733da4bc8b873ec9026e224b2bd7369b1fc", [:rebar3], [{:opentelemetry_api, "~> 1.2.2", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}, {:opentelemetry_semantic_conventions, "~> 0.2", [hex: :opentelemetry_semantic_conventions, repo: "hexpm", optional: false]}], "hexpm", "de476b2ac4faad3e3fe3d6e18b35dec9cb338c3b9910c2ce9317836dacad3483"},
|
"opentelemetry": {:hex, :opentelemetry, "1.3.1", "f0a342a74379e3540a634e7047967733da4bc8b873ec9026e224b2bd7369b1fc", [:rebar3], [{:opentelemetry_api, "~> 1.2.2", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}, {:opentelemetry_semantic_conventions, "~> 0.2", [hex: :opentelemetry_semantic_conventions, repo: "hexpm", optional: false]}], "hexpm", "de476b2ac4faad3e3fe3d6e18b35dec9cb338c3b9910c2ce9317836dacad3483"},
|
||||||
"opentelemetry_api": {:hex, :opentelemetry_api, "1.2.2", "693f47b0d8c76da2095fe858204cfd6350c27fe85d00e4b763deecc9588cf27a", [:mix, :rebar3], [{:opentelemetry_semantic_conventions, "~> 0.2", [hex: :opentelemetry_semantic_conventions, repo: "hexpm", optional: false]}], "hexpm", "dc77b9a00f137a858e60a852f14007bb66eda1ffbeb6c05d5fe6c9e678b05e9d"},
|
"opentelemetry_api": {:hex, :opentelemetry_api, "1.2.2", "693f47b0d8c76da2095fe858204cfd6350c27fe85d00e4b763deecc9588cf27a", [:mix, :rebar3], [{:opentelemetry_semantic_conventions, "~> 0.2", [hex: :opentelemetry_semantic_conventions, repo: "hexpm", optional: false]}], "hexpm", "dc77b9a00f137a858e60a852f14007bb66eda1ffbeb6c05d5fe6c9e678b05e9d"},
|
||||||
"opentelemetry_exporter": {:hex, :opentelemetry_exporter, "1.6.0", "f4fbf69aa9f1541b253813221b82b48a9863bc1570d8ecc517bc510c0d1d3d8c", [:rebar3], [{:grpcbox, ">= 0.0.0", [hex: :grpcbox, repo: "hexpm", optional: false]}, {:opentelemetry, "~> 1.3", [hex: :opentelemetry, repo: "hexpm", optional: false]}, {:opentelemetry_api, "~> 1.2", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}, {:tls_certificate_check, "~> 1.18", [hex: :tls_certificate_check, repo: "hexpm", optional: false]}], "hexpm", "1802d1dca297e46f21e5832ecf843c451121e875f73f04db87355a6cb2ba1710"},
|
"opentelemetry_exporter": {:hex, :opentelemetry_exporter, "1.6.0", "f4fbf69aa9f1541b253813221b82b48a9863bc1570d8ecc517bc510c0d1d3d8c", [:rebar3], [{:grpcbox, ">= 0.0.0", [hex: :grpcbox, repo: "hexpm", optional: false]}, {:opentelemetry, "~> 1.3", [hex: :opentelemetry, repo: "hexpm", optional: false]}, {:opentelemetry_api, "~> 1.2", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}, {:tls_certificate_check, "~> 1.18", [hex: :tls_certificate_check, repo: "hexpm", optional: false]}], "hexpm", "1802d1dca297e46f21e5832ecf843c451121e875f73f04db87355a6cb2ba1710"},
|
||||||
"opentelemetry_semantic_conventions": {:hex, :opentelemetry_semantic_conventions, "0.2.0", "b67fe459c2938fcab341cb0951c44860c62347c005ace1b50f8402576f241435", [:mix, :rebar3], [], "hexpm", "d61fa1f5639ee8668d74b527e6806e0503efc55a42db7b5f39939d84c07d6895"},
|
"opentelemetry_semantic_conventions": {:hex, :opentelemetry_semantic_conventions, "0.2.0", "b67fe459c2938fcab341cb0951c44860c62347c005ace1b50f8402576f241435", [:mix, :rebar3], [], "hexpm", "d61fa1f5639ee8668d74b527e6806e0503efc55a42db7b5f39939d84c07d6895"},
|
||||||
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"},
|
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"},
|
||||||
"telemetry": {:hex, :telemetry, "1.1.0", "a589817034a27eab11144ad24d5c0f9fab1f58173274b1e9bae7074af9cbee51", [:rebar3], [], "hexpm", "b727b2a1f75614774cff2d7565b64d0dfa5bd52ba517f16543e6fc7efcc0df48"},
|
"telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"},
|
||||||
"telemetry_registry": {:hex, :telemetry_registry, "0.3.0", "6768f151ea53fc0fbca70dbff5b20a8d663ee4e0c0b2ae589590e08658e76f1e", [:mix, :rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "492e2adbc609f3e79ece7f29fec363a97a2c484ac78a83098535d6564781e917"},
|
"telemetry_registry": {:hex, :telemetry_registry, "0.3.0", "6768f151ea53fc0fbca70dbff5b20a8d663ee4e0c0b2ae589590e08658e76f1e", [:mix, :rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "492e2adbc609f3e79ece7f29fec363a97a2c484ac78a83098535d6564781e917"},
|
||||||
"tls_certificate_check": {:hex, :tls_certificate_check, "1.19.0", "c76c4c5d79ee79a2b11c84f910c825d6f024a78427c854f515748e9bd025e987", [:rebar3], [{:ssl_verify_fun, "~> 1.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "4083b4a298add534c96125337cb01161c358bb32dd870d5a893aae685fd91d70"},
|
"tls_certificate_check": {:hex, :tls_certificate_check, "1.19.0", "c76c4c5d79ee79a2b11c84f910c825d6f024a78427c854f515748e9bd025e987", [:rebar3], [{:ssl_verify_fun, "~> 1.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "4083b4a298add534c96125337cb01161c358bb32dd870d5a893aae685fd91d70"},
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
{erl_opts, [debug_info]}.
|
{erl_opts, [debug_info]}.
|
||||||
{deps, [
|
{deps, [
|
||||||
{opentelemetry_api, "~> 1.0"},
|
{opentelemetry_api, "~> 1.0"},
|
||||||
{telemetry, "~> 1.0"},
|
{telemetry, "~> 1.0"}
|
||||||
{telemetry_registry, "~> 0.3.0"}
|
|
||||||
]}.
|
]}.
|
||||||
|
|
||||||
{project_plugins, [covertool,
|
{project_plugins, [covertool,
|
||||||
|
@ -17,8 +16,7 @@
|
||||||
{test, [{erl_opts, [nowarn_export_all]},
|
{test, [{erl_opts, [nowarn_export_all]},
|
||||||
{deps, [
|
{deps, [
|
||||||
{opentelemetry, "~> 1.0"},
|
{opentelemetry, "~> 1.0"},
|
||||||
{opentelemetry_exporter, "~> 1.0"},
|
{opentelemetry_exporter, "~> 1.0"}
|
||||||
{test_app, "~> 0.1"}
|
|
||||||
]},
|
]},
|
||||||
{paths, ["src", "test/support"]},
|
{paths, ["src", "test/support"]},
|
||||||
{ct_opts, [{ct_hooks, [cth_surefire]}]}]}]}.
|
{ct_opts, [{ct_hooks, [cth_surefire]}]}]}]}.
|
||||||
|
|
|
@ -1,14 +1,16 @@
|
||||||
{"1.2.0",
|
{"1.2.0",
|
||||||
[{<<"opentelemetry_api">>,{pkg,<<"opentelemetry_api">>,<<"1.0.2">>},0},
|
[{<<"opentelemetry_api">>,{pkg,<<"opentelemetry_api">>,<<"1.2.2">>},0},
|
||||||
{<<"telemetry">>,{pkg,<<"telemetry">>,<<"1.1.0">>},0},
|
{<<"opentelemetry_semantic_conventions">>,
|
||||||
{<<"telemetry_registry">>,{pkg,<<"telemetry_registry">>,<<"0.3.0">>},0}]}.
|
{pkg,<<"opentelemetry_semantic_conventions">>,<<"0.2.0">>},
|
||||||
|
1},
|
||||||
|
{<<"telemetry">>,{pkg,<<"telemetry">>,<<"1.2.1">>},0}]}.
|
||||||
[
|
[
|
||||||
{pkg_hash,[
|
{pkg_hash,[
|
||||||
{<<"opentelemetry_api">>, <<"91353EE40583B1D4F07D7B13ED62642ABFEC6AAA0D8A2114F07EDAFB2DF781C5">>},
|
{<<"opentelemetry_api">>, <<"693F47B0D8C76DA2095FE858204CFD6350C27FE85D00E4B763DEECC9588CF27A">>},
|
||||||
{<<"telemetry">>, <<"A589817034A27EAB11144AD24D5C0F9FAB1F58173274B1E9BAE7074AF9CBEE51">>},
|
{<<"opentelemetry_semantic_conventions">>, <<"B67FE459C2938FCAB341CB0951C44860C62347C005ACE1B50F8402576F241435">>},
|
||||||
{<<"telemetry_registry">>, <<"6768F151EA53FC0FBCA70DBFF5B20A8D663EE4E0C0B2AE589590E08658E76F1E">>}]},
|
{<<"telemetry">>, <<"68FDFE8D8F05A8428483A97D7AAB2F268AAFF24B49E0F599FAA091F1D4E7F61C">>}]},
|
||||||
{pkg_hash_ext,[
|
{pkg_hash_ext,[
|
||||||
{<<"opentelemetry_api">>, <<"2A8247F85C44216B883900067478D59955D11E58E5CFCA7C884CD4F203ACE3AC">>},
|
{<<"opentelemetry_api">>, <<"DC77B9A00F137A858E60A852F14007BB66EDA1FFBEB6C05D5FE6C9E678B05E9D">>},
|
||||||
{<<"telemetry">>, <<"B727B2A1F75614774CFF2D7565B64D0DFA5BD52BA517F16543E6FC7EFCC0DF48">>},
|
{<<"opentelemetry_semantic_conventions">>, <<"D61FA1F5639EE8668D74B527E6806E0503EFC55A42DB7B5F39939D84C07D6895">>},
|
||||||
{<<"telemetry_registry">>, <<"492E2ADBC609F3E79ECE7F29FEC363A97A2C484AC78A83098535D6564781E917">>}]}
|
{<<"telemetry">>, <<"DAD9CE9D8EFFC621708F99EAC538EF1CBE05D6A874DD741DE2E689C47FEAFED5">>}]}
|
||||||
].
|
].
|
||||||
|
|
|
@ -7,8 +7,7 @@
|
||||||
stdlib,
|
stdlib,
|
||||||
opentelemetry,
|
opentelemetry,
|
||||||
opentelemetry_api,
|
opentelemetry_api,
|
||||||
telemetry,
|
telemetry
|
||||||
telemetry_registry
|
|
||||||
]},
|
]},
|
||||||
{env,[]},
|
{env,[]},
|
||||||
{modules, []},
|
{modules, []},
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
-module(otel_telemetry).
|
-module(otel_telemetry).
|
||||||
|
|
||||||
|
-include_lib("kernel/include/logger.hrl").
|
||||||
-include_lib("opentelemetry_api/include/opentelemetry.hrl").
|
-include_lib("opentelemetry_api/include/opentelemetry.hrl").
|
||||||
|
|
||||||
-export([
|
-export([
|
||||||
|
@ -8,9 +9,8 @@
|
||||||
handle_event/4,
|
handle_event/4,
|
||||||
start_telemetry_span/4,
|
start_telemetry_span/4,
|
||||||
set_current_telemetry_span/2,
|
set_current_telemetry_span/2,
|
||||||
end_telemetry_span/2,
|
end_telemetry_span/2
|
||||||
trace_application/1,
|
]).
|
||||||
trace_application/2]).
|
|
||||||
|
|
||||||
-type telemetry_span_ctx() :: opentelemetry:span_ctx().
|
-type telemetry_span_ctx() :: opentelemetry:span_ctx().
|
||||||
-type parent_span_ctx() :: opentelemetry:span_ctx().
|
-type parent_span_ctx() :: opentelemetry:span_ctx().
|
||||||
|
@ -25,16 +25,6 @@ init(Application) ->
|
||||||
init(_Application, _Opts) ->
|
init(_Application, _Opts) ->
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
trace_application(Application) ->
|
|
||||||
trace_application(Application, []).
|
|
||||||
|
|
||||||
trace_application(Application, _Opts) ->
|
|
||||||
_ = telemetry_registry:discover_all([Application]),
|
|
||||||
AllEvents = telemetry_registry:list_events(),
|
|
||||||
SpannableEvents = telemetry_registry:spannable_events(),
|
|
||||||
_ = register_event_handlers(SpannableEvents, AllEvents),
|
|
||||||
ok.
|
|
||||||
|
|
||||||
-spec start_telemetry_span(atom(), opentelemetry:span_name(), telemetry:event_metadata(), otel_span:start_opts()) -> opentelemetry:span_ctx().
|
-spec start_telemetry_span(atom(), opentelemetry:span_name(), telemetry:event_metadata(), otel_span:start_opts()) -> opentelemetry:span_ctx().
|
||||||
start_telemetry_span(TracerId, SpanName, EventMetadata, Opts) ->
|
start_telemetry_span(TracerId, SpanName, EventMetadata, Opts) ->
|
||||||
ParentCtx = otel_tracer:current_span_ctx(),
|
ParentCtx = otel_tracer:current_span_ctx(),
|
||||||
|
@ -125,29 +115,6 @@ pop_from_tracer_stack(TracerId) ->
|
||||||
SpanCtxSet
|
SpanCtxSet
|
||||||
end.
|
end.
|
||||||
|
|
||||||
register_event_handlers(SpannableEvents, AllEvents) ->
|
|
||||||
lists:foldl(fun ({Prefix, Suffixes}, Handlers) ->
|
|
||||||
TracerId = tracer_id_for_events(Prefix, Suffixes, AllEvents),
|
|
||||||
NewHandlers = [attach_handler(Prefix, Suffix, TracerId)
|
|
||||||
|| Suffix <- Suffixes],
|
|
||||||
NewHandlers ++ Handlers
|
|
||||||
end,
|
|
||||||
[],
|
|
||||||
SpannableEvents).
|
|
||||||
|
|
||||||
attach_handler(Prefix, Suffix, TracerId) ->
|
|
||||||
Event = Prefix ++ [Suffix],
|
|
||||||
SpanName = list_to_binary(lists:join("_",
|
|
||||||
[atom_to_binary(Segment, utf8) || Segment <- Prefix])),
|
|
||||||
Config = #{tracer_id => TracerId, type => Suffix, span_name => SpanName},
|
|
||||||
Handler = fun ?MODULE:handle_event/4,
|
|
||||||
telemetry:attach({?MODULE, Event}, Event, Handler, Config).
|
|
||||||
|
|
||||||
tracer_id_for_events(Prefix, [Suffix | _], AllEvents) ->
|
|
||||||
Event = Prefix ++ [Suffix],
|
|
||||||
{Event, Module, _Metadata} = lists:keyfind(Event, 1, AllEvents),
|
|
||||||
Module.
|
|
||||||
|
|
||||||
handle_event(_Event,
|
handle_event(_Event,
|
||||||
_Measurements,
|
_Measurements,
|
||||||
Metadata,
|
Metadata,
|
||||||
|
|
|
@ -24,17 +24,13 @@ end_per_suite(_Config) ->
|
||||||
|
|
||||||
init_per_testcase(_, Config) ->
|
init_per_testcase(_, Config) ->
|
||||||
{ok, _} = application:ensure_all_started(telemetry),
|
{ok, _} = application:ensure_all_started(telemetry),
|
||||||
{ok, _} = application:ensure_all_started(telemetry_registry),
|
|
||||||
{ok, _} = application:ensure_all_started(test_app),
|
|
||||||
{ok, _} = application:ensure_all_started(opentelemetry_telemetry),
|
{ok, _} = application:ensure_all_started(opentelemetry_telemetry),
|
||||||
otel_batch_processor:set_exporter(otel_exporter_pid, self()),
|
otel_batch_processor:set_exporter(otel_exporter_pid, self()),
|
||||||
otel_telemetry:trace_application(test_app),
|
attach_event_handlers(),
|
||||||
Config.
|
Config.
|
||||||
|
|
||||||
end_per_testcase(_, Config) ->
|
end_per_testcase(_, Config) ->
|
||||||
application:stop(telemetry),
|
application:stop(telemetry),
|
||||||
application:stop(telemetry_registry),
|
|
||||||
application:stop(test_app),
|
|
||||||
application:stop(opentelemetry_telemetry),
|
application:stop(opentelemetry_telemetry),
|
||||||
application:stop(opentelemetry),
|
application:stop(opentelemetry),
|
||||||
Config.
|
Config.
|
||||||
|
@ -42,9 +38,9 @@ end_per_testcase(_, Config) ->
|
||||||
telemetry_span_handling(_Config) ->
|
telemetry_span_handling(_Config) ->
|
||||||
SpanCtx1 = ?start_span(<<"span-1">>),
|
SpanCtx1 = ?start_span(<<"span-1">>),
|
||||||
?set_current_span(SpanCtx1),
|
?set_current_span(SpanCtx1),
|
||||||
_Result = test_app:handler(ok),
|
_Result = handler(ok),
|
||||||
?assertMatch(SpanCtx1, ?current_span_ctx),
|
?assertMatch(SpanCtx1, ?current_span_ctx),
|
||||||
try test_app:handler(raise_exception) of
|
try handler(raise_exception) of
|
||||||
_ -> ok
|
_ -> ok
|
||||||
catch
|
catch
|
||||||
error:badarg -> ok
|
error:badarg -> ok
|
||||||
|
@ -72,11 +68,80 @@ successful_span_listener(Name) ->
|
||||||
|
|
||||||
exception_span_listener(Name) ->
|
exception_span_listener(Name) ->
|
||||||
receive
|
receive
|
||||||
{span, #span{name=Name,events=Events,status=Status,parent_span_id=ParentId,span_id=Id}} ->
|
{span, #span{name=Name,events=Events,status={status,error,Reason},parent_span_id=ParentId,span_id=Id} = Span} ->
|
||||||
?assertEqual({status,error,<<"badarg">>}, Status),
|
?assertEqual(<<"badarg">>, Reason),
|
||||||
?assertEqual(1, erlang:length(otel_events:list(Events))),
|
?assertEqual(1, erlang:length(otel_events:list(Events))),
|
||||||
{Id, ParentId}
|
{Id, ParentId}
|
||||||
after
|
after
|
||||||
5000 ->
|
5000 ->
|
||||||
error(timeout)
|
error(timeout)
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
handler(Args) ->
|
||||||
|
_ = telemetry:span(
|
||||||
|
[test_app, handler],
|
||||||
|
#{},
|
||||||
|
fun() ->
|
||||||
|
case Args of
|
||||||
|
raise_exception ->
|
||||||
|
binary_to_list("heh, already a list");
|
||||||
|
_ -> {nested_span(), #{}}
|
||||||
|
end
|
||||||
|
end).
|
||||||
|
|
||||||
|
nested_span() ->
|
||||||
|
_ = telemetry:span(
|
||||||
|
[test_app, nested_span],
|
||||||
|
#{},
|
||||||
|
fun() ->
|
||||||
|
{ok, #{}}
|
||||||
|
end).
|
||||||
|
|
||||||
|
-define(TRACER_ID, ?MODULE).
|
||||||
|
|
||||||
|
attach_event_handlers() ->
|
||||||
|
Events = [
|
||||||
|
[test_app, handler, start],
|
||||||
|
[test_app, handler, stop],
|
||||||
|
[test_app, handler, exception],
|
||||||
|
[test_app, nested_span, start],
|
||||||
|
[test_app, nested_span, stop],
|
||||||
|
[test_app, nested_span, exception]
|
||||||
|
],
|
||||||
|
telemetry:attach_many(otel_telemetry_test_handlers, Events, fun ?TRACER_ID:handle_event/4, #{}).
|
||||||
|
|
||||||
|
handle_event([test_app, handler, start], _, Meta, _) ->
|
||||||
|
otel_telemetry:start_telemetry_span(?TRACER_ID, <<"test_app_handler">>, Meta, #{});
|
||||||
|
|
||||||
|
handle_event([test_app, handler, stop], _, Meta, _) ->
|
||||||
|
otel_telemetry:set_current_telemetry_span(?TRACER_ID, Meta),
|
||||||
|
otel_telemetry:end_telemetry_span(?TRACER_ID, Meta);
|
||||||
|
|
||||||
|
handle_event([test_app, handler, exception], _, Meta, _) ->
|
||||||
|
Ctx = otel_telemetry:set_current_telemetry_span(?TRACER_ID, Meta),
|
||||||
|
#{
|
||||||
|
kind := Kind,
|
||||||
|
reason := Reason,
|
||||||
|
stacktrace := Stacktrace
|
||||||
|
} = Meta,
|
||||||
|
otel_span:record_exception(Ctx, Kind, Reason, Stacktrace, []),
|
||||||
|
otel_span:set_status(Ctx, opentelemetry:status(?OTEL_STATUS_ERROR, atom_to_binary(Reason))),
|
||||||
|
otel_telemetry:end_telemetry_span(?TRACER_ID, Meta);
|
||||||
|
|
||||||
|
handle_event([test_app, nested_span, start], _, Meta, _) ->
|
||||||
|
otel_telemetry:start_telemetry_span(?TRACER_ID, <<"test_app_nested_span">>, Meta, #{});
|
||||||
|
|
||||||
|
handle_event([test_app, nested_span, stop], _, Meta, _) ->
|
||||||
|
otel_telemetry:set_current_telemetry_span(?TRACER_ID, Meta),
|
||||||
|
otel_telemetry:end_telemetry_span(?TRACER_ID, Meta);
|
||||||
|
|
||||||
|
handle_event([test_app, nested_span, exception], _, Meta, _) ->
|
||||||
|
Ctx = otel_telemetry:set_current_telemetry_span(?TRACER_ID, Meta),
|
||||||
|
#{
|
||||||
|
kind := Kind,
|
||||||
|
reason := Reason,
|
||||||
|
stacktrace := Stacktrace
|
||||||
|
} = Meta,
|
||||||
|
otel_span:set_status(Ctx, opentelemetry:status(?OTEL_STATUS_ERROR, <<"">>)),
|
||||||
|
otel_span:record_exception(Ctx, Kind, Reason, Stacktrace, []),
|
||||||
|
otel_telemetry:end_telemetry_span(?TRACER_ID, Meta).
|
||||||
|
|
Loading…
Reference in New Issue