aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/cowboy_tracer_h.erl24
-rw-r--r--test/tracer_SUITE.erl3
2 files changed, 22 insertions, 5 deletions
diff --git a/src/cowboy_tracer_h.erl b/src/cowboy_tracer_h.erl
index 914c678..6c6340d 100644
--- a/src/cowboy_tracer_h.erl
+++ b/src/cowboy_tracer_h.erl
@@ -21,6 +21,8 @@
-export([terminate/3]).
-export([early_error/5]).
+-export([set_trace_patterns/0]).
+
-export([tracer_process/3]).
-export([system_continue/3]).
-export([system_terminate/4]).
@@ -66,6 +68,15 @@ terminate(StreamID, Reason, Next) ->
early_error(StreamID, Reason, PartialReq, Resp, Opts) ->
cowboy_stream:early_error(StreamID, Reason, PartialReq, Resp, Opts).
+%% API.
+
+%% These trace patterns are most likely not suitable for production.
+-spec set_trace_patterns() -> ok.
+set_trace_patterns() ->
+ erlang:trace_pattern({'_', '_', '_'}, [{'_', [], [{return_trace}]}], [local]),
+ erlang:trace_pattern(on_load, [{'_', [], [{return_trace}]}], [local]),
+ ok.
+
%% Internal.
init_tracer(StreamID, Req, Opts=#{tracer_match_specs := List, tracer_callback := _}) ->
@@ -119,12 +130,15 @@ start_tracer(StreamID, Req, Opts) ->
case erlang:trace_info(self(), tracer) of
{tracer, []} ->
TracerPid = proc_lib:spawn_link(?MODULE, tracer_process, [StreamID, Req, Opts]),
- erlang:trace_pattern({'_', '_', '_'}, [{'_', [], [{return_trace}]}], [local]),
- erlang:trace_pattern(on_load, [{'_', [], [{return_trace}]}], [local]),
- erlang:trace(self(), true, [
- send, 'receive', call, return_to, procs, ports,
- monotonic_timestamp, set_on_spawn, {tracer, TracerPid}
+ %% The default flags are probably not suitable for production.
+ Flags = maps:get(tracer_flags, Opts, [
+ send, 'receive', call, return_to,
+ procs, ports, monotonic_timestamp,
+ %% The set_on_spawn flag is necessary to catch events
+ %% from request processes.
+ set_on_spawn
]),
+ erlang:trace(self(), true, [{tracer, TracerPid}|Flags]),
ok;
_ ->
ok
diff --git a/test/tracer_SUITE.erl b/test/tracer_SUITE.erl
index 0f7fc5f..86ec9ac 100644
--- a/test/tracer_SUITE.erl
+++ b/test/tracer_SUITE.erl
@@ -22,7 +22,10 @@
%% ct.
+%% We initialize trace patterns here. Appropriate would be in
+%% init_per_suite/1, but this works just as well.
all() ->
+ cowboy_tracer_h:set_trace_patterns(),
cowboy_test:common_all().
%% We want tests for each group to execute sequentially