diff options
| author | Michael Klishin <michael@clojurewerkz.org> | 2020-10-05 20:13:34 +0300 |
|---|---|---|
| committer | Michael Klishin <michael@clojurewerkz.org> | 2020-10-05 20:13:34 +0300 |
| commit | 07a6ab36d55c770114d088cba9f0b52144de81e4 (patch) | |
| tree | 669d9f806aba0c4e9748796ee15f011ea5b4de79 | |
| parent | 32d7c7d702761158a343f0834c7bd89dbe5ac732 (diff) | |
| download | rabbitmq-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.erl | 22 |
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}. |
