Skip to content

Commit dcd6421

Browse files
committed
Add mnesia up/down, do not log events already logged by mnesia_event
1 parent 1b4229b commit dcd6421

File tree

5 files changed

+47
-18
lines changed

5 files changed

+47
-18
lines changed

include/alarms.hrl

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,24 @@
1010
-define(EVENT_MANAGER, alarm_handler).
1111

1212
-define(ALARM_TYPES,
13+
(?SYSTEM_MONITOR_ALARM_TYPES ++
14+
?MNESIA_ALARM_TYPES ++
15+
?NET_KERNEL_ALARM_TYPES)).
16+
17+
-define(SYSTEM_MONITOR_ALARM_TYPES,
1318
[long_gc,
1419
large_heap,
1520
busy_port,
16-
busy_dist_port,
17-
mnesia_overload,
21+
busy_dist_port]).
22+
23+
-define(MNESIA_ALARM_TYPES,
24+
[mnesia_overload,
1825
inconsistent_database,
1926
mnesia_fatal,
2027
mnesia_error,
21-
nodeup,
22-
nodedown
23-
]).
28+
mnesia_up,
29+
mnesia_down]).
30+
31+
-define(NET_KERNEL_ALARM_TYPES,
32+
[nodeup,
33+
nodedown]).

src/alarms_basic_handler.erl

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -200,16 +200,22 @@ handle_alarm(AlarmType, Details, Alarms0, LogTS0) ->
200200
error ->
201201
true
202202
end,
203-
LogTS = case ShouldLog of
204-
true ->
205-
log(AlarmType, Count, Details),
206-
orddict:store(AlarmType, TS, LogTS0);
207-
false ->
208-
LogTS0
203+
LogTS = case ShouldLog andalso maybe_log(AlarmType, Count, Details) of
204+
true -> orddict:store(AlarmType, TS, LogTS0);
205+
false -> LogTS0
209206
end,
210207
{Alarms, LogTS}.
211208

212-
log(AlarmType, Count, Details) ->
213-
error_logger:info_report([{alarm, AlarmType},
214-
{count, Count},
215-
{details, Details}]).
209+
maybe_log(AlarmType, Count, Details) ->
210+
case lists:member(
211+
AlarmType,
212+
[mnesia_up, mnesia_down |
213+
?SYSTEM_MONITOR_ALARM_TYPES ++ ?NET_KERNEL_ALARM_TYPES]) of
214+
true ->
215+
error_logger:info_report([{alarm, AlarmType},
216+
{count, Count},
217+
{details, Details}]),
218+
true;
219+
false ->
220+
false
221+
end.

src/alarms_server.erl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,10 +177,14 @@ msg_to_alarm({mnesia_overload, Details}) ->
177177
{mnesia_overload, Details};
178178
msg_to_alarm({inconsistent_database, Context, Node}) ->
179179
{inconsistent_database, {Context, Node}};
180-
msg_to_alarm({mnesia_fatal, Format, Args, BinaryCore}) ->
181-
{mnesia_fatal, {Format, Args, BinaryCore}};
180+
msg_to_alarm({mnesia_fatal, Format, Args, _BinaryCore}) ->
181+
{mnesia_fatal, {Format, Args}};
182182
msg_to_alarm({mnesia_error, Format, Args}) ->
183183
{mnesia_error, {Format, Args}};
184+
msg_to_alarm({mnesia_up, Node}) ->
185+
{mnesia_up, Node};
186+
msg_to_alarm({mnesia_down, Node}) ->
187+
{mnesia_down, Node};
184188

185189
%% from net_kernel:monitor_nodes/2
186190
msg_to_alarm({nodeup, Node, InfoList}) ->

test/alarms_basic_handler_SUITE.erl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ test_logging(_Config) ->
7878
fake_alarm(long_gc, gc1),
7979
fake_alarm(long_gc, gc2),
8080
fake_alarm(large_heap, lh),
81+
fake_alarm(mnesia_error, {"error", []}), % should not be logged
8182

8283
%% Wait until events are processed
8384
sys:get_status(alarm_handler),

test/alarms_server_SUITE.erl

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,21 @@ test_alarm_handling(_Config) ->
8686
alarm_handler:clear_alarm(inconsistent_database),
8787

8888
fake_event({mnesia_fatal, "fatal", [], <<>>}),
89-
[{mnesia_fatal, {"fatal", [], <<>>}}] = alarm_handler:get_alarms(),
89+
[{mnesia_fatal, {"fatal", []}}] = alarm_handler:get_alarms(),
9090
alarm_handler:clear_alarm(mnesia_fatal),
9191

9292
fake_event({mnesia_error, "error", []}),
9393
[{mnesia_error, {"error", []}}] = alarm_handler:get_alarms(),
9494
alarm_handler:clear_alarm(mnesia_error),
9595

96+
fake_event({mnesia_up, node}),
97+
[{mnesia_up, node}] = alarm_handler:get_alarms(),
98+
alarm_handler:clear_alarm(mnesia_up),
99+
100+
fake_event({mnesia_down, node}),
101+
[{mnesia_down, node}] = alarm_handler:get_alarms(),
102+
alarm_handler:clear_alarm(mnesia_down),
103+
96104
fake_event({nodeup, upnode, []}),
97105
[{nodeup, {upnode, []}}] = alarm_handler:get_alarms(),
98106
alarm_handler:clear_alarm(nodeup),

0 commit comments

Comments
 (0)