summaryrefslogtreecommitdiff
path: root/src/rabbit_trace.erl
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2011-05-19 10:53:01 +0100
committerSimon MacMullen <simon@rabbitmq.com>2011-05-19 10:53:01 +0100
commit1e2c482d34e80270518e58311105772763df730e (patch)
treed105c935b7498c3ce3b0659acf248072be365dc2 /src/rabbit_trace.erl
parent19bec198d96967a7d16fc6ac4feba6898b5ff426 (diff)
downloadrabbitmq-server-1e2c482d34e80270518e58311105772763df730e.tar.gz
Refactor a bit and push more work "below" checking the state. This reduces the cost from 2.3% to 1.1%.
Diffstat (limited to 'src/rabbit_trace.erl')
-rw-r--r--src/rabbit_trace.erl39
1 files changed, 22 insertions, 17 deletions
diff --git a/src/rabbit_trace.erl b/src/rabbit_trace.erl
index e24d22ad..d0fc4a39 100644
--- a/src/rabbit_trace.erl
+++ b/src/rabbit_trace.erl
@@ -21,13 +21,11 @@
-include("rabbit.hrl").
-include("rabbit_framing.hrl").
--record(trace_state, {trace_exchange}).
-
%%----------------------------------------------------------------------------
-ifdef(use_specs).
--type(state() :: #trace_state{trace_exchange :: rabbit_exchange:name()}).
+-type(state() :: rabbit_exchange:name()).
-spec(init/1 :: (rabbit_types:vhost()) -> state()).
-spec(tap_trace_in/2 :: (rabbit_types:basic_message(), state()) -> 'ok').
@@ -38,29 +36,32 @@
%%----------------------------------------------------------------------------
init(VHost) ->
- #trace_state{trace_exchange = trace_exchange(VHost)}.
+ trace_exchange(VHost).
-tap_trace_in(Msg, #trace_state{trace_exchange = TraceX}) ->
- maybe_trace(Msg, TraceX, <<"publish">>, xname(Msg), []).
+tap_trace_in(Msg, TraceX) ->
+ maybe_trace(Msg, TraceX, publish, []).
tap_trace_out({#resource{name = QName}, _QPid, _QMsgId, Redelivered, Msg},
- #trace_state{trace_exchange = TraceX}) ->
+ TraceX) ->
RedeliveredNum = case Redelivered of true -> 1; false -> 0 end,
- maybe_trace(Msg, TraceX, <<"deliver">>, QName,
+ maybe_trace(Msg, TraceX, {deliver, QName},
[{<<"redelivered">>, signedint, RedeliveredNum}]).
xname(#basic_message{exchange_name = #resource{name = XName}}) -> XName.
vhost(#basic_message{exchange_name = #resource{virtual_host = VHost}}) -> VHost.
-maybe_trace(Msg, TraceX, RKPrefix, RKSuffix, Extra) ->
- XName = xname(Msg),
+maybe_trace(Msg, TraceX, Mode, Extra) ->
case TraceX of
- none -> ok;
- XName -> ok;
- _ -> case catch trace(TraceX, Msg, RKPrefix, RKSuffix, Extra) of
- {'EXIT', R} -> rabbit_log:info("Trace died: ~p~n", [R]);
- ok -> ok
- end
+ none -> ok;
+ _ -> X = xname(Msg),
+ case TraceX of
+ X -> ok;
+ _ -> case catch trace(TraceX, Msg, Mode, Extra) of
+ {'EXIT', R} -> rabbit_log:info(
+ "Trace died: ~p~n", [R]);
+ ok -> ok
+ end
+ end
end.
trace_exchange(VHost) ->
@@ -69,8 +70,12 @@ trace_exchange(VHost) ->
{ok, Xs} -> proplists:get_value(VHost, Xs, none)
end.
-trace(TraceX, Msg0, RKPrefix, RKSuffix, Extra) ->
+trace(TraceX, Msg0, Mode, Extra) ->
Msg = ensure_content_decoded(Msg0),
+ {RKPrefix, RKSuffix} = case Mode of
+ publish -> {<<"publish">>, xname(Msg0)};
+ {deliver, Q} -> {<<"deliver">>, Q}
+ end,
rabbit_basic:publish(rabbit_misc:r(vhost(Msg), exchange, TraceX),
<<RKPrefix/binary, ".", RKSuffix/binary>>,
#'P_basic'{headers = msg_to_table(Msg) ++ Extra},