Per discussion in #10415, this introduces a new module,
rabbit_mgmt_nodes, which provides a couple of helpers
that can be used to implement Cowboy REST's
resource_exists/2 in the modules that return
information about cluster members.
(cherry picked from commit 0c0e2ca932
)
This commit is contained in:
parent
0e69c417f1
commit
73188f4a26
|
@ -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",
|
||||
|
|
|
@ -216,10 +216,17 @@ vary: accept, accept-encoding, origin</pre>
|
|||
<td></td>
|
||||
<td class="path">/api/nodes/<i>name</i></td>
|
||||
<td>
|
||||
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.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>X</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td class="path">/api/nodes/<i>name</i>/memory</td>
|
||||
<td>
|
||||
Returns a <a href="https://rabbitmq.com/memory-use.html">memory usage breakdown</a> of an individual node in the RabbitMQ cluster.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
|
@ -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).
|
|
@ -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).
|
||||
|
|
|
@ -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 ->
|
||||
|
|
|
@ -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}).
|
||||
|
|
|
@ -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)),
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue