summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniil Fedotov <dfedotov@pivotal.io>2016-04-05 17:50:03 +0100
committerDaniil Fedotov <dfedotov@pivotal.io>2016-04-05 17:50:03 +0100
commit36d9c694a3556d0a938d9b64218f41f6c0a51a35 (patch)
treee3291c74968c25a0d9778c5700b204caa83100ef /src
parent20a2d289c6e3f227a681d0886c09b30ebe14a4d8 (diff)
parent71a7cc423d2e3760adf0f3cbe26c278f9b2eec5a (diff)
downloadrabbitmq-server-git-36d9c694a3556d0a938d9b64218f41f6c0a51a35.tar.gz
Merge branch 'master' into rabbitmq-server-591
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_cli.erl27
-rw-r--r--src/rabbit_control_main.erl32
-rw-r--r--src/rabbit_disk_monitor.erl2
3 files changed, 47 insertions, 14 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 b7a7b51242..6f99ec903c 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]},
@@ -610,10 +610,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) ->
@@ -750,15 +751,26 @@ default_if_empty(List, Default) when is_list(List) ->
true -> [list_to_atom(X) || X <- List]
end.
+display_info_message_row(IsEscaped, Result, InfoItemKeys) ->
+ display_row([format_info_item(
+ case proplists:lookup(X, Result) of
+ none when is_list(Result), length(Result) > 0 ->
+ exit({error, {bad_info_key, X}});
+ none -> Result;
+ {X, Value} -> Value
+ end, IsEscaped) || X <- InfoItemKeys]).
+
display_info_message(IsEscaped) ->
- fun(Result, InfoItemKeys) ->
- display_row([format_info_item(
- case proplists:lookup(X, Result) of
- none when is_list(Result), length(Result) > 0 ->
- exit({error, {bad_info_key, X}});
- none -> Result;
- {X, Value} -> Value
- end, IsEscaped) || X <- InfoItemKeys])
+ fun ([], _) ->
+ ok;
+ ([FirstResult|_] = List, InfoItemKeys) when is_list(FirstResult) ->
+ lists:foreach(fun(Result) ->
+ display_info_message_row(IsEscaped, Result, InfoItemKeys)
+ end,
+ List),
+ ok;
+ (Result, InfoItemKeys) ->
+ display_info_message_row(IsEscaped, Result, InfoItemKeys)
end.
display_info_list(Results, InfoItemKeys) when is_list(Results) ->
diff --git a/src/rabbit_disk_monitor.erl b/src/rabbit_disk_monitor.erl
index 124306487e..88a8096fd4 100644
--- a/src/rabbit_disk_monitor.erl
+++ b/src/rabbit_disk_monitor.erl
@@ -235,7 +235,7 @@ parse_free_win32(CommandResult) ->
list_to_integer(lists:reverse(Free)).
interpret_limit({mem_relative, Relative})
- when is_float(Relative), Relative < 1 ->
+ when is_float(Relative) ->
round(Relative * vm_memory_monitor:get_total_memory());
interpret_limit(Absolute) ->
case rabbit_resource_monitor_misc:parse_information_unit(Absolute) of