diff --git a/deps/rabbitmq_management/app.bzl b/deps/rabbitmq_management/app.bzl
index dbe17d23e2..b53d393cd5 100644
--- a/deps/rabbitmq_management/app.bzl
+++ b/deps/rabbitmq_management/app.bzl
@@ -29,6 +29,7 @@ def all_beam_files(name = "all_beam_files"):
"src/rabbit_mgmt_hsts.erl",
"src/rabbit_mgmt_load_definitions.erl",
"src/rabbit_mgmt_login.erl",
+ "src/rabbit_mgmt_nodes.erl",
"src/rabbit_mgmt_oauth_bootstrap.erl",
"src/rabbit_mgmt_reset_handler.erl",
"src/rabbit_mgmt_stats.erl",
@@ -159,6 +160,7 @@ def all_test_beam_files(name = "all_test_beam_files"):
"src/rabbit_mgmt_hsts.erl",
"src/rabbit_mgmt_load_definitions.erl",
"src/rabbit_mgmt_login.erl",
+ "src/rabbit_mgmt_nodes.erl",
"src/rabbit_mgmt_oauth_bootstrap.erl",
"src/rabbit_mgmt_reset_handler.erl",
"src/rabbit_mgmt_stats.erl",
@@ -378,6 +380,7 @@ def all_srcs(name = "all_srcs"):
"src/rabbit_mgmt_hsts.erl",
"src/rabbit_mgmt_load_definitions.erl",
"src/rabbit_mgmt_login.erl",
+ "src/rabbit_mgmt_nodes.erl",
"src/rabbit_mgmt_oauth_bootstrap.erl",
"src/rabbit_mgmt_reset_handler.erl",
"src/rabbit_mgmt_stats.erl",
diff --git a/deps/rabbitmq_management/priv/www/api/index.html b/deps/rabbitmq_management/priv/www/api/index.html
index 3437153556..582ebf58aa 100644
--- a/deps/rabbitmq_management/priv/www/api/index.html
+++ b/deps/rabbitmq_management/priv/www/api/index.html
@@ -216,10 +216,17 @@ vary: accept, accept-encoding, origin
|
/api/nodes/name |
- An individual node in the RabbitMQ cluster. Add
- "?memory=true" to get memory statistics, and "?binary=true"
- to get a breakdown of binary memory use (may be expensive if
- there are many small binaries in the system).
+ Returns information about an individual node in the RabbitMQ cluster.
+ |
+
+
+ X |
+ |
+ |
+ |
+ /api/nodes/name/memory |
+
+ Returns a memory usage breakdown of an individual node in the RabbitMQ cluster.
|
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_nodes.erl b/deps/rabbitmq_management/src/rabbit_mgmt_nodes.erl
new file mode 100644
index 0000000000..2382f031c6
--- /dev/null
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_nodes.erl
@@ -0,0 +1,26 @@
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2007-2024 Broadcom. All Rights Reserved. The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. All rights reserved.
+%%
+
+-module(rabbit_mgmt_nodes).
+
+-export([
+ node_name_from_req/1,
+ node_exists/1
+]).
+
+%%
+%% API
+%%
+
+node_name_from_req(ReqData) ->
+ list_to_atom(binary_to_list(rabbit_mgmt_util:id(node, ReqData))).
+
+%% To be used in resource_exists/2
+node_exists(ReqData) ->
+ Node = node_name_from_req(ReqData),
+ AllNodes = rabbit_nodes:list_members(),
+ lists:member(Node, AllNodes).
\ No newline at end of file
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_node.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_node.erl
index c95ff56143..881b8f61dd 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_node.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_node.erl
@@ -26,10 +26,7 @@ content_types_provided(ReqData, Context) ->
{rabbit_mgmt_util:responder_map(to_json), ReqData, Context}.
resource_exists(ReqData, Context) ->
- {case node0(ReqData) of
- not_found -> false;
- _ -> true
- end, ReqData, Context}.
+ {rabbit_mgmt_nodes:node_exists(ReqData), ReqData, Context}.
to_json(ReqData, Context) ->
rabbit_mgmt_util:reply(node0(ReqData), ReqData, Context).
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_node_memory.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_node_memory.erl
index 1688913af8..cfca24d73a 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_node_memory.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_node_memory.erl
@@ -26,7 +26,7 @@ content_types_provided(ReqData, Context) ->
{rabbit_mgmt_util:responder_map(to_json), ReqData, Context}.
resource_exists(ReqData, Context) ->
- {node_exists(ReqData, get_node(ReqData)), ReqData, Context}.
+ {rabbit_mgmt_nodes:node_exists(ReqData), ReqData, Context}.
to_json(ReqData, {Mode, Context}) ->
rabbit_mgmt_util:reply(augment(Mode, ReqData), ReqData, {Mode, Context}).
@@ -39,16 +39,9 @@ is_authorized(ReqData, {Mode, Context}) ->
get_node(ReqData) ->
list_to_atom(binary_to_list(rabbit_mgmt_util:id(node, ReqData))).
-node_exists(ReqData, Node) ->
- case [N || N <- rabbit_mgmt_wm_nodes:all_nodes(ReqData),
- proplists:get_value(name, N) == Node] of
- [] -> false;
- [_] -> true
- end.
-
augment(Mode, ReqData) ->
Node = get_node(ReqData),
- case node_exists(ReqData, Node) of
+ case rabbit_mgmt_nodes:node_exists(ReqData) of
false ->
not_found;
true ->
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_node_memory_ets.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_node_memory_ets.erl
index d3eaf845e4..dead9c28d1 100644
--- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_node_memory_ets.erl
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_node_memory_ets.erl
@@ -26,7 +26,7 @@ content_types_provided(ReqData, Context) ->
{rabbit_mgmt_util:responder_map(to_json), ReqData, Context}.
resource_exists(ReqData, Context) ->
- {node_exists(ReqData, get_node(ReqData)), ReqData, Context}.
+ {rabbit_mgmt_nodes:node_exists(ReqData), ReqData, Context}.
to_json(ReqData, {Mode, Context}) ->
rabbit_mgmt_util:reply(augment(Mode, ReqData), ReqData, {Mode, Context}).
diff --git a/deps/rabbitmq_management/test/rabbit_mgmt_http_SUITE.erl b/deps/rabbitmq_management/test/rabbit_mgmt_http_SUITE.erl
index c25d10ed6b..b5551ffadb 100644
--- a/deps/rabbitmq_management/test/rabbit_mgmt_http_SUITE.erl
+++ b/deps/rabbitmq_management/test/rabbit_mgmt_http_SUITE.erl
@@ -322,6 +322,7 @@ nodes_test(Config) ->
assert_list([DiscNode], http_get(Config, "/nodes")),
assert_list([DiscNode], http_get(Config, "/nodes", "monitor", "monitor", ?OK)),
http_get(Config, "/nodes", "user", "user", ?NOT_AUTHORISED),
+ http_get(Config, "/nodes/does-not-exist", ?NOT_FOUND),
[Node] = http_get(Config, "/nodes"),
Path = "/nodes/" ++ binary_to_list(maps:get(name, Node)),
assert_item(DiscNode, http_get(Config, Path, ?OK)),
diff --git a/moduleindex.yaml b/moduleindex.yaml
index 3e620f8561..b4ce8e2259 100755
--- a/moduleindex.yaml
+++ b/moduleindex.yaml
@@ -848,6 +848,7 @@ rabbitmq_management:
- rabbit_mgmt_hsts
- rabbit_mgmt_load_definitions
- rabbit_mgmt_login
+- rabbit_mgmt_nodes
- rabbit_mgmt_oauth_bootstrap
- rabbit_mgmt_reset_handler
- rabbit_mgmt_stats