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