summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Klishin <michael@clojurewerkz.org>2020-10-05 20:13:34 +0300
committerMichael Klishin <michael@clojurewerkz.org>2020-10-05 20:13:34 +0300
commit07a6ab36d55c770114d088cba9f0b52144de81e4 (patch)
tree669d9f806aba0c4e9748796ee15f011ea5b4de79
parent32d7c7d702761158a343f0834c7bd89dbe5ac732 (diff)
downloadrabbitmq-server-git-07a6ab36d55c770114d088cba9f0b52144de81e4.tar.gz
Introduce rabbit_alarm:get_local_alarms/{0,1}
Part of rabbitmq/rabbitmq-management#844
-rw-r--r--src/rabbit_alarm.erl22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/rabbit_alarm.erl b/src/rabbit_alarm.erl
index 6ced324e5f..8cd9c6992a 100644
--- a/src/rabbit_alarm.erl
+++ b/src/rabbit_alarm.erl
@@ -21,8 +21,8 @@
-behaviour(gen_event).
-export([start_link/0, start/0, stop/0, register/2, set_alarm/1,
- clear_alarm/1, get_alarms/0, get_alarms/1, on_node_up/1, on_node_down/1,
- format_as_map/1, format_as_maps/1]).
+ clear_alarm/1, get_alarms/0, get_alarms/1, get_local_alarms/0, get_local_alarms/1, on_node_up/1, on_node_down/1,
+ format_as_map/1, format_as_maps/1, is_local/1]).
-export([init/1, handle_call/2, handle_event/2, handle_info/2,
terminate/2, code_change/3]).
@@ -100,6 +100,21 @@ get_alarms() -> gen_event:call(?SERVER, ?MODULE, get_alarms, infinity).
-spec get_alarms(timeout()) -> [{alarm(), []}].
get_alarms(Timeout) -> gen_event:call(?SERVER, ?MODULE, get_alarms, Timeout).
+-spec get_local_alarms() -> [alarm()].
+get_local_alarms() -> gen_event:call(?SERVER, ?MODULE, get_local_alarms, infinity).
+
+-spec get_local_alarms(timeout()) -> [alarm()].
+get_local_alarms(Timeout) -> gen_event:call(?SERVER, ?MODULE, get_local_alarms, Timeout).
+
+-spec filter_local_alarms([alarm()]) -> [alarm()].
+filter_local_alarms(Alarms) ->
+ lists:filter(fun is_local/1, Alarms).
+
+-spec is_local(alarm()) -> boolean().
+is_local({file_descriptor_limit, _}) -> true;
+is_local({{resource_limit, _Resource, Node}, _}) when Node =:= node() -> true;
+is_local({{resource_limit, _Resource, Node}, _}) when Node =/= node() -> false.
+
-spec format_as_map(alarm()) -> #{binary() => term()}.
format_as_map(file_descriptor_limit) ->
#{
@@ -164,6 +179,9 @@ handle_call({register, Pid, AlertMFA}, State = #alarms{alarmed_nodes = AN}) ->
handle_call(get_alarms, State) ->
{ok, compute_alarms(State), State};
+handle_call(get_local_alarms, State) ->
+ {ok, filter_local_alarms(compute_alarms(State)), State};
+
handle_call(_Request, State) ->
{ok, not_understood, State}.