summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexey Lebedeff <alebedev@mirantis.com>2016-03-24 15:29:07 +0300
committerAlexey Lebedeff <alebedev@mirantis.com>2016-03-24 15:32:38 +0300
commitfa60c263bab6eecbc98addd4ccbc4bc3119b1ffe (patch)
tree7cf45f43c2bc64482115fface22bfb7414ca78a5 /src
parentaf67b9554059568dcef1bd05224ba84324ec817b (diff)
downloadrabbitmq-server-git-fa60c263bab6eecbc98addd4ccbc4bc3119b1ffe.tar.gz
Add support for listing up/down queues
Part of https://github.com/rabbitmq/rabbitmq-server/issues/688
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_cli.erl27
-rw-r--r--src/rabbit_control_main.erl5
2 files changed, 27 insertions, 5 deletions
diff --git a/src/rabbit_cli.erl b/src/rabbit_cli.erl
index 086f88d9f6..4151504956 100644
--- a/src/rabbit_cli.erl
+++ b/src/rabbit_cli.erl
@@ -18,17 +18,19 @@
-include("rabbit_cli.hrl").
-export([main/3, start_distribution/0, start_distribution/1,
- parse_arguments/4, rpc_call/4, rpc_call/5, rpc_call/7]).
+ parse_arguments/4, filter_opts/2,
+ rpc_call/4, rpc_call/5, rpc_call/7]).
%%----------------------------------------------------------------------------
-ifdef(use_specs).
+-type(option_name() :: string()).
+-type(option_value() :: string() | node() | boolean()).
-type(optdef() :: flag | {option, string()}).
--type(parse_result() :: {'ok', {atom(), [{string(), string()}], [string()]}} |
+-type(parse_result() :: {'ok', {atom(), [{option_name(), option_value()}], [string()]}} |
'no_command').
-
-spec(main/3 :: (fun (([string()], string()) -> parse_result()),
fun ((atom(), atom(), [any()], [any()]) -> any()),
atom()) -> no_return()).
@@ -38,6 +40,9 @@
-spec(parse_arguments/4 ::
([{atom(), [{string(), optdef()}]} | atom()],
[{string(), optdef()}], string(), [string()]) -> parse_result()).
+
+-spec(filter_opts/2 :: ([{option_name(), option_value()}], [option_name()]) -> [boolean()]).
+
-spec(rpc_call/4 :: (node(), atom(), atom(), [any()]) -> any()).
-spec(rpc_call/5 :: (node(), atom(), atom(), [any()], number()) -> any()).
-spec(rpc_call/7 :: (node(), atom(), atom(), [any()], reference(), pid(),
@@ -244,6 +249,22 @@ process_opts(Defs, C, [A | As], Found, KVs, Outs) ->
{none, _, _} -> no_command
end.
+%% When we have a set of flags that are used for filtering, we want by
+%% default to include every such option in our output. But if a user
+%% explicitly specified any such flag, we want to include only items
+%% which he has requested.
+filter_opts(CurrentOptionValues, AllOptionNames) ->
+ Explicit = lists:map(fun(OptName) ->
+ proplists:get_bool(OptName, CurrentOptionValues)
+ end,
+ AllOptionNames),
+ case lists:member(true, Explicit) of
+ true ->
+ Explicit;
+ false ->
+ lists:duplicate(length(AllOptionNames), true)
+ end.
+
%%----------------------------------------------------------------------------
fmt_stderr(Format, Args) -> rabbit_misc:format_stderr(Format ++ "~n", Args).
diff --git a/src/rabbit_control_main.erl b/src/rabbit_control_main.erl
index b805d21e48..ab36e130e2 100644
--- a/src/rabbit_control_main.erl
+++ b/src/rabbit_control_main.erl
@@ -73,7 +73,7 @@
{clear_policy, [?VHOST_DEF]},
{list_policies, [?VHOST_DEF]},
- {list_queues, [?VHOST_DEF]},
+ {list_queues, [?VHOST_DEF, ?OFFLINE_DEF, ?ONLINE_DEF]},
{list_exchanges, [?VHOST_DEF]},
{list_bindings, [?VHOST_DEF]},
{list_connections, [?VHOST_DEF]},
@@ -613,10 +613,11 @@ action(list_user_permissions, Node, Args = [_Username], _Opts, Inform, Timeout)
true);
action(list_queues, Node, Args, Opts, Inform, Timeout) ->
+ [Online, Offline] = rabbit_cli:filter_opts(Opts, [?ONLINE_OPT, ?OFFLINE_OPT]),
Inform("Listing queues", []),
VHostArg = list_to_binary(proplists:get_value(?VHOST_OPT, Opts)),
ArgAtoms = default_if_empty(Args, [name, messages]),
- call(Node, {rabbit_amqqueue, info_all, [VHostArg, ArgAtoms]},
+ call(Node, {rabbit_amqqueue, info_all, [VHostArg, ArgAtoms, Online, Offline]},
ArgAtoms, Timeout);
action(list_exchanges, Node, Args, Opts, Inform, Timeout) ->