From efba7cecd3946bda16c7f5bb8cc01936842f5a23 Mon Sep 17 00:00:00 2001 From: Marcial Rosales Date: Wed, 4 Jun 2025 13:36:03 +0200 Subject: [PATCH 1/4] Add suite --- selenium/suites/mgt/mgt-only-queuesAndStreams.sh | 10 ++++++++++ selenium/test/basic-auth/rabbitmq.disable-metrics.conf | 3 +++ 2 files changed, 13 insertions(+) create mode 100755 selenium/suites/mgt/mgt-only-queuesAndStreams.sh create mode 100644 selenium/test/basic-auth/rabbitmq.disable-metrics.conf diff --git a/selenium/suites/mgt/mgt-only-queuesAndStreams.sh b/selenium/suites/mgt/mgt-only-queuesAndStreams.sh new file mode 100755 index 000000000000..8ef8c42e06c6 --- /dev/null +++ b/selenium/suites/mgt/mgt-only-queuesAndStreams.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +SCRIPT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +TEST_CASES_PATH=/queuesAndStreams +TEST_CONFIG_PATH=/basic-auth +PROFILES="disable-metrics" + +source $SCRIPT/../../bin/suite_template $@ +run diff --git a/selenium/test/basic-auth/rabbitmq.disable-metrics.conf b/selenium/test/basic-auth/rabbitmq.disable-metrics.conf new file mode 100644 index 000000000000..795c235f248a --- /dev/null +++ b/selenium/test/basic-auth/rabbitmq.disable-metrics.conf @@ -0,0 +1,3 @@ + +management.disable_stats = true +management_agent.disable_metrics_collector = true From 89806f4a9d8d81023b8a3b6cfbcd72c7b62846bc Mon Sep 17 00:00:00 2001 From: Marcial Rosales Date: Wed, 4 Jun 2025 17:06:08 +0200 Subject: [PATCH 2/4] WIP Include consumer(s) to basic queue data So that when stats are disabled, users can still monitor queues' consumers --- .../src/rabbit_mgmt_db.erl | 24 ++++++++++++++++++- .../src/rabbit_mgmt_wm_queue.erl | 3 ++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_db.erl b/deps/rabbitmq_management/src/rabbit_mgmt_db.erl index da10224749b7..e3f2d3554f1d 100644 --- a/deps/rabbitmq_management/src/rabbit_mgmt_db.erl +++ b/deps/rabbitmq_management/src/rabbit_mgmt_db.erl @@ -144,7 +144,12 @@ augment_exchanges(Xs, Ranges, _) -> %% we can only cache if no ranges are requested. %% The mgmt ui doesn't use ranges for queue listings --spec augment_queues([proplists:proplist()], ranges(), basic | detailed | full) -> any(). +-spec augment_queues([proplists:proplist()], ranges(), core | basic | detailed | full) -> any(). +augment_queues(Qs, ?NO_RANGES = Ranges, core) -> + submit_cached(queues, + fun(Interval, Queues) -> + list_core_queue_data(Ranges, Queues) + end, Qs, max(60000, length(Qs) * 2)); augment_queues(Qs, ?NO_RANGES = Ranges, basic) -> submit_cached(queues, fun(Interval, Queues) -> @@ -357,6 +362,23 @@ consumers_stats(VHost) -> list_queue_stats(Ranges, Objs, Interval) -> list_queue_stats(Ranges, Objs, Interval, all_list_queue_data). +-spec list_core_queue_data(ranges(), [proplists:proplist()]) -> + [proplists:proplist()]. +list_core_queue_data(Ranges, Objs) -> + Ids = [id_lookup(queue_stats, Obj) || Obj <- Objs], + DataLookup = get_data_from_nodes({rabbit_mgmt_data, all_list_basic_queue_data, [Ids, Ranges]}), + adjust_hibernated_memory_use( + [begin + Id = id_lookup(queue_stats, Obj), + Pid = pget(pid, Obj), + QueueData = maps:get(Id, DataLookup), + Props = maps:get(queue_stats, QueueData), + ConsumerStats = rabbit_mgmt_data_compat:fill_consumer_active_fields( + maps:get(consumer_stats, QueueData)), + + {Pid, combine(Props, Obj) ++ ConsumerStats} + end || Obj <- Objs]). + -spec list_basic_queue_stats(ranges(), [proplists:proplist()], integer()) -> [proplists:proplist()]. list_basic_queue_stats(Ranges, Objs, Interval) -> diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue.erl index 9a0f406a5cb0..3b11304a2237 100644 --- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue.erl +++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue.erl @@ -49,7 +49,8 @@ to_json(ReqData, Context) -> rabbit_mgmt_util:reply(ensure_defaults(Payload), ReqData, Context); true -> Q = case rabbit_mgmt_util:enable_queue_totals(ReqData) of - false -> queue(ReqData); + false -> rabbit_mgmt_db:list_core_queue_data([queue(ReqData)], + [queue(ReqData)], core); true -> queue_with_totals(ReqData) end, rabbit_mgmt_util:reply( From 3b0e70c0941accd56ebe441b831ea051ece2f318 Mon Sep 17 00:00:00 2001 From: Marcial Rosales Date: Wed, 4 Jun 2025 17:41:11 +0200 Subject: [PATCH 3/4] Skip inteval --- deps/rabbitmq_management/src/rabbit_mgmt_db.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_db.erl b/deps/rabbitmq_management/src/rabbit_mgmt_db.erl index e3f2d3554f1d..797fccc3628c 100644 --- a/deps/rabbitmq_management/src/rabbit_mgmt_db.erl +++ b/deps/rabbitmq_management/src/rabbit_mgmt_db.erl @@ -147,7 +147,7 @@ augment_exchanges(Xs, Ranges, _) -> -spec augment_queues([proplists:proplist()], ranges(), core | basic | detailed | full) -> any(). augment_queues(Qs, ?NO_RANGES = Ranges, core) -> submit_cached(queues, - fun(Interval, Queues) -> + fun(_Interval, Queues) -> list_core_queue_data(Ranges, Queues) end, Qs, max(60000, length(Qs) * 2)); augment_queues(Qs, ?NO_RANGES = Ranges, basic) -> From a8b4b4848ae4e13624494afdf3d0faf87def2d45 Mon Sep 17 00:00:00 2001 From: Marcial Rosales Date: Thu, 5 Jun 2025 08:25:05 +0200 Subject: [PATCH 4/4] Fix issue --- deps/rabbitmq_management/src/rabbit_mgmt_db.erl | 7 ++++--- deps/rabbitmq_management/src/rabbit_mgmt_wm_queue.erl | 8 ++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_db.erl b/deps/rabbitmq_management/src/rabbit_mgmt_db.erl index 797fccc3628c..fb493a05afed 100644 --- a/deps/rabbitmq_management/src/rabbit_mgmt_db.erl +++ b/deps/rabbitmq_management/src/rabbit_mgmt_db.erl @@ -366,7 +366,7 @@ list_queue_stats(Ranges, Objs, Interval) -> [proplists:proplist()]. list_core_queue_data(Ranges, Objs) -> Ids = [id_lookup(queue_stats, Obj) || Obj <- Objs], - DataLookup = get_data_from_nodes({rabbit_mgmt_data, all_list_basic_queue_data, [Ids, Ranges]}), + DataLookup = get_data_from_nodes({rabbit_mgmt_data, all_detail_queue_data, [Ids, Ranges]}), adjust_hibernated_memory_use( [begin Id = id_lookup(queue_stats, Obj), @@ -374,9 +374,10 @@ list_core_queue_data(Ranges, Objs) -> QueueData = maps:get(Id, DataLookup), Props = maps:get(queue_stats, QueueData), ConsumerStats = rabbit_mgmt_data_compat:fill_consumer_active_fields( - maps:get(consumer_stats, QueueData)), + maps:get(consumer_stats, QueueData)), + Consumers = [{consumer_details, ConsumerStats}], - {Pid, combine(Props, Obj) ++ ConsumerStats} + {Pid, combine(Props, Obj) ++ Consumers} end || Obj <- Objs]). -spec list_basic_queue_stats(ranges(), [proplists:proplist()], integer()) -> diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue.erl index 3b11304a2237..2144579abe56 100644 --- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue.erl +++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_queue.erl @@ -48,10 +48,10 @@ to_json(ReqData, Context) -> rabbit_mgmt_format:strip_pids(Q)), rabbit_mgmt_util:reply(ensure_defaults(Payload), ReqData, Context); true -> - Q = case rabbit_mgmt_util:enable_queue_totals(ReqData) of - false -> rabbit_mgmt_db:list_core_queue_data([queue(ReqData)], - [queue(ReqData)], core); - true -> queue_with_totals(ReqData) + [Q] = case rabbit_mgmt_util:enable_queue_totals(ReqData) of + false -> rabbit_mgmt_db:augment_queues([queue(ReqData)], + rabbit_mgmt_util:range_ceil(ReqData), core); + true -> [queue_with_totals(ReqData)] end, rabbit_mgmt_util:reply( rabbit_mgmt_format:strip_pids(Q),