summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2011-05-20 14:51:57 +0100
committerSimon MacMullen <simon@rabbitmq.com>2011-05-20 14:51:57 +0100
commitdff7935f22364e622544d67afaa1ba986c2059e0 (patch)
treea840e37e08f2316bcc5b6d1dbedaf2ca3cce7a29 /src
parent265142455a7f8e4bb09aee18f57b5beedae68afd (diff)
downloadrabbitmq-server-git-dff7935f22364e622544d67afaa1ba986c2059e0.tar.gz
Rewrite the rabbitmqctl interface. Define trace_exchanges in rabbit.app.
Diffstat (limited to 'src')
-rw-r--r--src/rabbit.erl16
-rw-r--r--src/rabbit_control.erl24
-rw-r--r--src/rabbit_trace.erl34
3 files changed, 35 insertions, 39 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl
index 9052f2f935..e6e80b4aac 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -25,8 +25,6 @@
-export([log_location/1]).
--export([get_env/1, set_env/2, unset_env/1]).
-
%%---------------------------------------------------------------------------
%% Boot steps.
-export([maybe_insert_default_data/0, boot_delegate/0, recover/0]).
@@ -188,9 +186,6 @@
-spec(maybe_insert_default_data/0 :: () -> 'ok').
-spec(boot_delegate/0 :: () -> 'ok').
-spec(recover/0 :: () -> 'ok').
--spec(get_env/1 :: (atom()) -> term()).
--spec(set_env/2 :: (atom(), term()) -> 'ok').
--spec(unset_env/1 :: (atom()) -> 'ok').
-endif.
@@ -519,14 +514,3 @@ log_rotation_result(ok, {error, SaslLogError}) ->
{error, {cannot_rotate_sasl_logs, SaslLogError}};
log_rotation_result(ok, ok) ->
ok.
-
-get_env(Key) ->
- application:get_env(rabbit, Key).
-
-set_env(Key, Value) ->
- application:set_env(rabbit, Key, Value),
- rabbit_channel:refresh_config_all().
-
-unset_env(Key) ->
- application:unset_env(rabbit, Key),
- rabbit_channel:refresh_config_all().
diff --git a/src/rabbit_control.erl b/src/rabbit_control.erl
index 5a013711a0..2a9dd4639d 100644
--- a/src/rabbit_control.erl
+++ b/src/rabbit_control.erl
@@ -282,18 +282,15 @@ action(list_consumers, Node, _Args, Opts, Inform) ->
Other -> Other
end;
-action(set_env, Node, [Var, Term], _Opts, Inform) ->
- Inform("Setting control variable ~s for node ~p to ~s", [Var, Node, Term]),
- rpc_call(Node, rabbit, set_env, [parse(Var), parse(Term)]);
+action(start_tracing, Node, [XName], Opts, Inform) ->
+ VHost = list_to_binary(proplists:get_value(?VHOST_OPT, Opts)),
+ Inform("Starting tracing", []),
+ rpc_call(Node, rabbit_trace, start, [VHost, XName]);
-action(get_env, Node, [Var], _Opts, Inform) ->
- Inform("Getting control variable ~s for node ~p", [Var, Node]),
- Val = rpc_call(Node, rabbit, get_env, [parse(Var)]),
- io:format("~p~n", [Val]);
-
-action(unset_env, Node, [Var], _Opts, Inform) ->
- Inform("Clearing control variable ~s for node ~p", [Var, Node]),
- rpc_call(Node, rabbit, unset_env, [parse(Var)]);
+action(stop_tracing, Node, [], Opts, Inform) ->
+ VHost = list_to_binary(proplists:get_value(?VHOST_OPT, Opts)),
+ Inform("Stopping tracing", []),
+ rpc_call(Node, rabbit_trace, stop, [VHost]);
action(set_permissions, Node, [Username, CPerm, WPerm, RPerm], Opts, Inform) ->
VHost = proplists:get_value(?VHOST_OPT, Opts),
@@ -338,11 +335,6 @@ default_if_empty(List, Default) when is_list(List) ->
true -> [list_to_atom(X) || X <- List]
end.
-parse(Str) ->
- {ok, Tokens, _} = erl_scan:string(Str ++ "."),
- {ok, Term} = erl_parse:parse_term(Tokens),
- Term.
-
display_info_list(Results, InfoItemKeys) when is_list(Results) ->
lists:foreach(
fun (Result) -> display_row(
diff --git a/src/rabbit_trace.erl b/src/rabbit_trace.erl
index 09f2545d69..6228c54e8a 100644
--- a/src/rabbit_trace.erl
+++ b/src/rabbit_trace.erl
@@ -16,11 +16,13 @@
-module(rabbit_trace).
--export([init/1, tap_trace_in/2, tap_trace_out/2]).
+-export([init/1, tap_trace_in/2, tap_trace_out/2, start/2, stop/1]).
-include("rabbit.hrl").
-include("rabbit_framing.hrl").
+-define(TRACE_EXCHANGES, trace_exchanges).
+
%%----------------------------------------------------------------------------
-ifdef(use_specs).
@@ -31,17 +33,18 @@
-spec(tap_trace_in/2 :: (rabbit_types:basic_message(), state()) -> 'ok').
-spec(tap_trace_out/2 :: (rabbit_amqqueue:qmsg(), state()) -> 'ok').
+-spec(start/2 :: (rabbit_types:vhost(), binary()) -> 'ok').
+-spec(stop/1 :: (rabbit_types:vhost()) -> 'ok').
+
-endif.
%%----------------------------------------------------------------------------
init(VHost) ->
- case application:get_env(rabbit, trace_exchanges) of
- undefined -> none;
- {ok, XNs} -> case proplists:get_value(VHost, XNs, none) of
- none -> none;
- Name -> rabbit_misc:r(VHost, exchange, Name)
- end
+ {ok, XNs} = application:get_env(rabbit, ?TRACE_EXCHANGES),
+ case proplists:get_value(VHost, XNs, none) of
+ none -> none;
+ Name -> rabbit_misc:r(VHost, exchange, Name)
end.
tap_trace_in(Msg = #basic_message{exchange_name = #resource{name = XName}},
@@ -54,6 +57,23 @@ tap_trace_out({#resource{name = QName}, _QPid, _QMsgId, Redelivered, Msg},
maybe_trace(TraceXN, Msg, <<"deliver">>, QName,
[{<<"redelivered">>, signedint, RedeliveredNum}]).
+%%----------------------------------------------------------------------------
+
+start(VHost, XN) ->
+ update_config(fun (Xs) -> orddict:store(VHost, list_to_binary(XN), Xs) end).
+
+stop(VHost) ->
+ update_config(fun (Xs) -> orddict:erase(VHost, Xs) end).
+
+update_config(Fun) ->
+ {ok, Xs0} = application:get_env(rabbit, ?TRACE_EXCHANGES),
+ Xs = Fun(orddict:from_list(Xs0)),
+ application:set_env(rabbit, ?TRACE_EXCHANGES, Xs),
+ rabbit_channel:refresh_config_all(),
+ ok.
+
+%%----------------------------------------------------------------------------
+
maybe_trace(none, _Msg, _RKPrefix, _RKSuffix, _Extra) ->
ok;
maybe_trace(XName, #basic_message{exchange_name = #resource{name = XName}},