Support getting the history of alarms
This commit is contained in:
parent
96fff39535
commit
3ad5700442
|
@ -38,10 +38,11 @@
|
||||||
-export([ load/0
|
-export([ load/0
|
||||||
, unload/0
|
, unload/0
|
||||||
, get_alarms/0
|
, get_alarms/0
|
||||||
|
, get_alarms/1
|
||||||
]).
|
]).
|
||||||
|
|
||||||
-record(common_alarm, {id, desc}).
|
-record(common_alarm, {id, desc}).
|
||||||
-record(alarm_history, {id, clear_at}).
|
-record(alarm_history, {id, desc, clear_at}).
|
||||||
|
|
||||||
-define(ALARM_TAB, emqx_alarm).
|
-define(ALARM_TAB, emqx_alarm).
|
||||||
-define(ALARM_HISTORY_TAB, emqx_alarm_history).
|
-define(ALARM_HISTORY_TAB, emqx_alarm_history).
|
||||||
|
@ -79,7 +80,14 @@ unload() ->
|
||||||
gen_event:swap_handler(alarm_handler, {?MODULE, swap}, {alarm_handler, []}).
|
gen_event:swap_handler(alarm_handler, {?MODULE, swap}, {alarm_handler, []}).
|
||||||
|
|
||||||
get_alarms() ->
|
get_alarms() ->
|
||||||
gen_event:call(alarm_handler, ?MODULE, get_alarms).
|
get_alarms(present).
|
||||||
|
|
||||||
|
get_alarms(present) ->
|
||||||
|
Alarms = ets:tab2list(?ALARM_TAB),
|
||||||
|
[{Id, Desc} || #common_alarm{id = Id, desc = Desc} <- Alarms];
|
||||||
|
get_alarms(history) ->
|
||||||
|
Alarms = ets:tab2list(?ALARM_HISTORY_TAB),
|
||||||
|
[{Id, Desc, ClearAt} || #alarm_history{id = Id, desc = Desc, clear_at = ClearAt} <- Alarms].
|
||||||
|
|
||||||
%%----------------------------------------------------------------------
|
%%----------------------------------------------------------------------
|
||||||
%% gen_event callbacks
|
%% gen_event callbacks
|
||||||
|
@ -117,14 +125,14 @@ handle_event({clear_alarm, AlarmId}, State) ->
|
||||||
handle_event(_, State) ->
|
handle_event(_, State) ->
|
||||||
{ok, State}.
|
{ok, State}.
|
||||||
|
|
||||||
handle_info(_, State) -> {ok, State}.
|
handle_info(_, State) ->
|
||||||
|
{ok, State}.
|
||||||
|
|
||||||
handle_call(get_alarms, State) ->
|
handle_call(_Query, State) ->
|
||||||
{ok, get_alarms_(), State};
|
{ok, {error, bad_query}, State}.
|
||||||
handle_call(_Query, State) -> {ok, {error, bad_query}, State}.
|
|
||||||
|
|
||||||
terminate(swap, _State) ->
|
terminate(swap, _State) ->
|
||||||
{emqx_alarm_handler, get_alarms_()};
|
{emqx_alarm_handler, get_alarms()};
|
||||||
terminate(_, _) ->
|
terminate(_, _) ->
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
|
@ -134,8 +142,8 @@ terminate(_, _) ->
|
||||||
|
|
||||||
init_tables(ExistingAlarms) ->
|
init_tables(ExistingAlarms) ->
|
||||||
mnesia:clear_table(?ALARM_TAB),
|
mnesia:clear_table(?ALARM_TAB),
|
||||||
lists:foreach(fun({Id, _Desc}) ->
|
lists:foreach(fun({Id, Desc}) ->
|
||||||
set_alarm_history(Id)
|
set_alarm_history(Id, Desc)
|
||||||
end, ExistingAlarms).
|
end, ExistingAlarms).
|
||||||
|
|
||||||
encode_alarm({AlarmId, #alarm{severity = Severity,
|
encode_alarm({AlarmId, #alarm{severity = Severity,
|
||||||
|
@ -146,12 +154,12 @@ encode_alarm({AlarmId, #alarm{severity = Severity,
|
||||||
{desc, [{severity, Severity},
|
{desc, [{severity, Severity},
|
||||||
{title, iolist_to_binary(Title)},
|
{title, iolist_to_binary(Title)},
|
||||||
{summary, iolist_to_binary(Summary)},
|
{summary, iolist_to_binary(Summary)},
|
||||||
{ts, emqx_time:now_secs(Ts)}]}]);
|
{timestamp, emqx_time:now_ms(Ts)}]}]);
|
||||||
encode_alarm({AlarmId, undefined}) ->
|
encode_alarm({AlarmId, undefined}) ->
|
||||||
emqx_json:safe_encode([{id, maybe_to_binary(AlarmId)}]);
|
emqx_json:safe_encode([{id, maybe_to_binary(AlarmId)}]);
|
||||||
encode_alarm({AlarmId, AlarmDesc}) ->
|
encode_alarm({AlarmId, AlarmDesc}) ->
|
||||||
emqx_json:safe_encode([{id, maybe_to_binary(AlarmId)},
|
emqx_json:safe_encode([{id, maybe_to_binary(AlarmId)},
|
||||||
{description, maybe_to_binary(AlarmDesc)}]).
|
{desc, maybe_to_binary(AlarmDesc)}]).
|
||||||
|
|
||||||
alarm_msg(Topic, Payload) ->
|
alarm_msg(Topic, Payload) ->
|
||||||
Msg = emqx_message:make(?MODULE, Topic, Payload),
|
Msg = emqx_message:make(?MODULE, Topic, Payload),
|
||||||
|
@ -172,14 +180,15 @@ set_alarm_(Id, Desc) ->
|
||||||
mnesia:dirty_write(?ALARM_TAB, #common_alarm{id = Id, desc = Desc}).
|
mnesia:dirty_write(?ALARM_TAB, #common_alarm{id = Id, desc = Desc}).
|
||||||
|
|
||||||
clear_alarm_(Id) ->
|
clear_alarm_(Id) ->
|
||||||
mnesia:dirty_delete(?ALARM_TAB, Id),
|
case mnesia:dirty_read(?ALARM_TAB, Id) of
|
||||||
set_alarm_history(Id).
|
[#common_alarm{desc = Desc}] ->
|
||||||
|
set_alarm_history(Id, Desc),
|
||||||
|
mnesia:dirty_delete(?ALARM_TAB, Id);
|
||||||
|
[] -> ok
|
||||||
|
end.
|
||||||
|
|
||||||
get_alarms_() ->
|
set_alarm_history(Id, Desc) ->
|
||||||
Alarms = ets:tab2list(?ALARM_TAB),
|
|
||||||
[{Id, Desc} || #common_alarm{id = Id, desc = Desc} <- Alarms].
|
|
||||||
|
|
||||||
set_alarm_history(Id) ->
|
|
||||||
mnesia:dirty_write(?ALARM_HISTORY_TAB, #alarm_history{id = Id,
|
mnesia:dirty_write(?ALARM_HISTORY_TAB, #alarm_history{id = Id,
|
||||||
clear_at = undefined}).
|
desc = Desc,
|
||||||
|
clear_at = os:timestamp()}).
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue