diff options
| author | Francesco Mazzoli <francesco@rabbitmq.com> | 2012-07-13 17:02:46 +0100 |
|---|---|---|
| committer | Francesco Mazzoli <francesco@rabbitmq.com> | 2012-07-13 17:02:46 +0100 |
| commit | 155a516574aed5f67e9052b5a3f01e1378c90dbb (patch) | |
| tree | 538394d69ef93618ff4ae83f336bdd9804f27677 /src | |
| parent | 07ea1d8f2b9e88f965a41b94f8cee2ead78162c0 (diff) | |
| download | rabbitmq-server-git-155a516574aed5f67e9052b5a3f01e1378c90dbb.tar.gz | |
add a `get_alarms/0' to `rabbit_alarm', equivalent to `alarm_handler:get_alarms/0'
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_alarm.erl | 50 |
1 files changed, 31 insertions, 19 deletions
diff --git a/src/rabbit_alarm.erl b/src/rabbit_alarm.erl index 69256b4da8..9eeb61b6a6 100644 --- a/src/rabbit_alarm.erl +++ b/src/rabbit_alarm.erl @@ -19,7 +19,7 @@ -behaviour(gen_event). -export([start_link/0, start/0, stop/0, register/2, set_alarm/1, - clear_alarm/1, on_node_up/1, on_node_down/1]). + clear_alarm/1, get_alarms/0, on_node_up/1, on_node_down/1]). -export([init/1, handle_call/2, handle_event/2, handle_info/2, terminate/2, code_change/3]). @@ -28,7 +28,7 @@ -define(SERVER, ?MODULE). --record(alarms, {alertees, alarmed_nodes}). +-record(alarms, {alertees, alarmed_nodes, alarms}). %%---------------------------------------------------------------------------- @@ -74,6 +74,9 @@ set_alarm(Alarm) -> clear_alarm(Alarm) -> gen_event:notify(?SERVER, {clear_alarm, Alarm}). +get_alarms() -> + gen_event:call(?SERVER, ?MODULE, get_alarms, infinity). + on_node_up(Node) -> gen_event:notify(?SERVER, {node_up, Node}). on_node_down(Node) -> gen_event:notify(?SERVER, {node_down, Node}). @@ -90,32 +93,25 @@ remote_conserve_resources(Pid, Source, false) -> init([]) -> {ok, #alarms{alertees = dict:new(), - alarmed_nodes = dict:new()}}. + alarmed_nodes = dict:new(), + alarms = []}}. handle_call({register, Pid, HighMemMFA}, State) -> {ok, 0 < dict:size(State#alarms.alarmed_nodes), internal_register(Pid, HighMemMFA, State)}; +handle_call(get_alarms, State = #alarms{alarms = Alarms}) -> + {ok, Alarms, State}; + handle_call(_Request, State) -> {ok, not_understood, State}. -handle_event({set_alarm, {{resource_limit, Source, Node}, []}}, State) -> - rabbit_log:warning("'~p' resource limit alarm set on node ~p", - [Source, Node]), - {ok, maybe_alert(fun dict:append/3, Node, Source, State)}; +handle_event({set_alarm, Alarm}, State = #alarms{alarms = Alarms}) -> + handle_set_alarm(Alarm, State#alarms{alarms = [Alarm|Alarms]}); -handle_event({clear_alarm, {resource_limit, Source, Node}}, State) -> - rabbit_log:warning("'~p' resource limit alarm cleared on node ~p", - [Source, Node]), - {ok, maybe_alert(fun dict_unappend/3, Node, Source, State)}; - -handle_event({set_alarm, {file_descriptor_limit, []}}, State) -> - rabbit_log:warning("file descriptor limit alarm set"), - {ok, State}; - -handle_event({clear_alarm, file_descriptor_limit}, State) -> - rabbit_log:warning("file descriptor limit alarm cleared"), - {ok, State}; +handle_event({clear_alarm, Alarm}, State = #alarms{alarms = Alarms}) -> + handle_clear_alarm(Alarm, State#alarms{alarms = lists:keydelete(Alarm, 1, + Alarms)}); handle_event({node_up, Node}, State) -> %% Must do this via notify and not call to avoid possible deadlock. @@ -213,3 +209,19 @@ internal_register(Pid, {M, F, A} = HighMemMFA, end, NewAlertees = dict:store(Pid, HighMemMFA, Alertees), State#alarms{alertees = NewAlertees}. + +handle_set_alarm({{resource_limit, Source, Node}, []}, State) -> + rabbit_log:warning("'~p' resource limit alarm set on node ~p", + [Source, Node]), + {ok, maybe_alert(fun dict:append/3, Node, Source, State)}; +handle_set_alarm({file_descriptor_limit, []}, State) -> + rabbit_log:warning("file descriptor limit alarm set"), + {ok, State}. + +handle_clear_alarm({resource_limit, Source, Node}, State) -> + rabbit_log:warning("'~p' resource limit alarm cleared on node ~p", + [Source, Node]), + {ok, maybe_alert(fun dict_unappend/3, Node, Source, State)}; +handle_clear_alarm(file_descriptor_limit, State) -> + rabbit_log:warning("file descriptor limit alarm cleared"), + {ok, State}. |
