Skip to content

Commit 09d1ec1

Browse files
committed
Support enable_queue_totals when queue name is specified
For `/api/queues`, users can specify `disable_stats=true` and `enable_queue_totals=true` parameters to return a concise set of fields. However, the `enable_queue_totals` is not currently supported for `/api/queues/<vhost>/<name>`, probably just a small oversight that slipped through the cracks. This commit adds that support and updates the respective unit test, focusing on not breaking existing public functions and on simplicity, at the cost of a slight bit of duplication.
1 parent 49ee9dd commit 09d1ec1

File tree

2 files changed

+28
-7
lines changed

2 files changed

+28
-7
lines changed

deps/rabbitmq_management/src/rabbit_mgmt_wm_queue.erl

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,13 @@ to_json(ReqData, Context) ->
5050
rabbit_mgmt_format:strip_pids(Q)),
5151
rabbit_mgmt_util:reply(ensure_defaults(Payload), ReqData, Context);
5252
true ->
53-
rabbit_mgmt_util:reply(rabbit_mgmt_format:strip_pids(queue(ReqData)),
54-
ReqData, Context)
53+
Q = case rabbit_mgmt_util:enable_queue_totals(ReqData) of
54+
false -> queue(ReqData);
55+
true -> queue_with_totals(ReqData)
56+
end,
57+
rabbit_mgmt_util:reply(
58+
rabbit_mgmt_format:strip_pids(Q),
59+
ReqData, Context)
5560
end
5661
catch
5762
{error, invalid_range_parameters, Reason} ->
@@ -110,10 +115,26 @@ queue(ReqData) ->
110115
VHost -> queue(VHost, rabbit_mgmt_util:id(queue, ReqData))
111116
end.
112117

113-
114118
queue(VHost, QName) ->
115119
Name = rabbit_misc:r(VHost, queue, QName),
116120
case rabbit_amqqueue:lookup(Name) of
117121
{ok, Q} -> rabbit_mgmt_format:queue(Q);
118122
{error, not_found} -> not_found
119123
end.
124+
125+
queue_with_totals(ReqData) ->
126+
case rabbit_mgmt_util:vhost(ReqData) of
127+
not_found -> not_found;
128+
VHost -> queue_with_totals(VHost, rabbit_mgmt_util:id(queue, ReqData))
129+
end.
130+
131+
queue_with_totals(VHost, QName) ->
132+
Name = rabbit_misc:r(VHost, queue, QName),
133+
case rabbit_amqqueue:lookup(Name) of
134+
{ok, Q} -> QueueInfo = rabbit_amqqueue:info(Q,
135+
[name, durable, auto_delete, exclusive,
136+
owner_pid, arguments, type, state,
137+
policy, totals, online, type_specific]),
138+
rabbit_mgmt_format:queue_info(QueueInfo);
139+
{error, not_found} -> not_found
140+
end.

deps/rabbitmq_management/test/rabbit_mgmt_only_http_SUITE.erl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -516,14 +516,14 @@ queues_enable_totals_test(Config) ->
516516
vhost => <<"/">>,
517517
durable => true,
518518
auto_delete => false,
519-
exclusive => false,
519+
exclusive => null,
520520
arguments => #{'x-queue-type' => <<"quorum">>},
521521
leader => NodeBin,
522+
messages => 2,
523+
messages_ready => 2,
524+
messages_unacknowledged => 0,
522525
members => [NodeBin]}, Queue),
523526

524-
?assert(not maps:is_key(messages, Queue)),
525-
?assert(not maps:is_key(messages_ready, Queue)),
526-
?assert(not maps:is_key(messages_unacknowledged, Queue)),
527527
?assert(not maps:is_key(message_stats, Queue)),
528528
?assert(not maps:is_key(messages_details, Queue)),
529529
?assert(not maps:is_key(reductions_details, Queue)),

0 commit comments

Comments
 (0)