Add `passage:strip_span/1` function
diff --git a/src/passage.erl b/src/passage.erl
index f44a8d2..a631d82 100644
--- a/src/passage.erl
+++ b/src/passage.erl
@@ -43,6 +43,7 @@
-export([get_baggage_items/1]).
-export([log/2, log/3]).
-export([inject_span/4, extract_span/4]).
+-export([strip_span/1]).
-export_type([tracer_id/0]).
-export_type([maybe_span/0]).
@@ -292,6 +293,11 @@
end
end.
+%% @doc Strips the tags, logs and references from the given span.
+-spec strip_span(maybe_span()) -> maybe_span().
+strip_span(undefined) -> undefined;
+strip_span(Span) -> passage_span:strip(Span).
+
%%------------------------------------------------------------------------------
%% Interal Functions
%%------------------------------------------------------------------------------
diff --git a/src/passage_span.erl b/src/passage_span.erl
index a512272..9029060 100644
--- a/src/passage_span.erl
+++ b/src/passage_span.erl
@@ -72,6 +72,7 @@
-export([set_baggage_items/2]).
-export([get_baggage_items/1]).
-export([get_tracer/1]).
+-export([strip/1]).
%%------------------------------------------------------------------------------
%% Macros & Records
@@ -246,6 +247,11 @@
get_tracer(Span) ->
Span#?SPAN.tracer.
+%% @private
+-spec strip(span()) -> span().
+strip(Span) ->
+ Span#?SPAN{refs = [], tags = #{}, logs = []}.
+
%%------------------------------------------------------------------------------
%% Internal Functions
%%------------------------------------------------------------------------------
@@ -284,7 +290,3 @@
(_) -> false
end,
Options).
-
--spec strip(span()) -> span().
-strip(Span) ->
- Span#?SPAN{refs = [], tags = #{}, logs = []}.
diff --git a/test/passage_tests.erl b/test/passage_tests.erl
index 327b801..49d7965 100644
--- a/test/passage_tests.erl
+++ b/test/passage_tests.erl
@@ -107,6 +107,24 @@
?assertEqual(#{error => true},
passage_span:get_tags(FinishedSpan))
end},
+ {"strip",
+ fun () ->
+ ok = start_test_tracer(),
+ Root = passage:strip_span(passage:start_span(root, [{tracer, test_tracer}])),
+
+ Span0 = passage:start_span(child, [{child_of, Root}]),
+ Span1 = passage:set_tags(Span0, #{a => b}),
+ Span2 = passage:log(Span1, #{message => hello}, [{time, 0}]),
+
+ ?assertEqual(#{a => b}, passage_span:get_tags(Span2)),
+ ?assertEqual([{#{message => hello}, 0}], passage_span:get_logs(Span2)),
+ ?assertEqual([{child_of, Root}], passage_span:get_refs(Span2)),
+
+ Span3 = passage:strip_span(Span2),
+ ?assertEqual(#{}, passage_span:get_tags(Span3)),
+ ?assertEqual([], passage_span:get_logs(Span3)),
+ ?assertEqual([], passage_span:get_refs(Span3))
+ end},
{"lifetime",
fun () ->
ok = start_test_tracer(),