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