Using fixed topic for system message of alarm (#2647)
* Using fixed topic for system message of alarm
This commit is contained in:
parent
37eef7b72a
commit
0c7c4ee417
|
@ -98,7 +98,7 @@ handle_event({set_alarm, Alarm = {AlarmId, AlarmDesc}}, State) ->
|
|||
?LOG(warning, "~p set", [Alarm]),
|
||||
case encode_alarm(Alarm) of
|
||||
{ok, Json} ->
|
||||
emqx_broker:safe_publish(alarm_msg(topic(alert, maybe_to_binary(AlarmId)), Json));
|
||||
emqx_broker:safe_publish(alarm_msg(topic(alert), Json));
|
||||
{error, Reason} ->
|
||||
?LOG(error, "Failed to encode alarm: ~p", [Reason])
|
||||
end,
|
||||
|
@ -106,7 +106,12 @@ handle_event({set_alarm, Alarm = {AlarmId, AlarmDesc}}, State) ->
|
|||
{ok, State};
|
||||
handle_event({clear_alarm, AlarmId}, State) ->
|
||||
?LOG(notice, "~p clear", [AlarmId]),
|
||||
emqx_broker:safe_publish(alarm_msg(topic(clear, maybe_to_binary(AlarmId)), <<"">>)),
|
||||
case encode_alarm({AlarmId, undefined}) of
|
||||
{ok, Json} ->
|
||||
emqx_broker:safe_publish(alarm_msg(topic(clear), Json));
|
||||
{error, Reason} ->
|
||||
?LOG(error, "Failed to encode alarm: ~p", [Reason])
|
||||
end,
|
||||
clear_alarm_(AlarmId),
|
||||
{ok, State};
|
||||
handle_event(_, State) ->
|
||||
|
@ -142,19 +147,21 @@ encode_alarm({AlarmId, #alarm{severity = Severity,
|
|||
{title, iolist_to_binary(Title)},
|
||||
{summary, iolist_to_binary(Summary)},
|
||||
{ts, emqx_time:now_secs(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)},
|
||||
{desc, maybe_to_binary(AlarmDesc)}]).
|
||||
{description, maybe_to_binary(AlarmDesc)}]).
|
||||
|
||||
alarm_msg(Topic, Payload) ->
|
||||
Msg = emqx_message:make(?MODULE, Topic, Payload),
|
||||
emqx_message:set_headers(#{'Content-Type' => <<"application/json">>},
|
||||
emqx_message:set_flag(sys, Msg)).
|
||||
|
||||
topic(alert, AlarmId) ->
|
||||
emqx_topic:systop(<<"alarms/", AlarmId/binary, "/alert">>);
|
||||
topic(clear, AlarmId) ->
|
||||
emqx_topic:systop(<<"alarms/", AlarmId/binary, "/clear">>).
|
||||
topic(alert) ->
|
||||
emqx_topic:systop(<<"alarms/alert">>);
|
||||
topic(clear) ->
|
||||
emqx_topic:systop(<<"alarms/clear">>).
|
||||
|
||||
maybe_to_binary(Data) when is_binary(Data) ->
|
||||
Data;
|
||||
|
|
|
@ -62,8 +62,8 @@ t_alarm_handler(_) ->
|
|||
{ok, Data} = gen_tcp:recv(Sock, 0),
|
||||
{ok, ?CONNACK_PACKET(?RC_SUCCESS), <<>>, _} = raw_recv_parse(Data, ?MQTT_PROTO_V5),
|
||||
|
||||
Topic1 = emqx_topic:systop(<<"alarms/alarm_for_test/alert">>),
|
||||
Topic2 = emqx_topic:systop(<<"alarms/alarm_for_test/clear">>),
|
||||
Topic1 = emqx_topic:systop(<<"alarms/alert">>),
|
||||
Topic2 = emqx_topic:systop(<<"alarms/clear">>),
|
||||
SubOpts = #{rh => 1, qos => ?QOS_2, rap => 0, nl => 0, rc => 0},
|
||||
emqx_client_sock:send(Sock,
|
||||
raw_send_serialize(
|
||||
|
|
Loading…
Reference in New Issue