From 0c7c4ee4170b2280550a18df04ad4bcc654e99d4 Mon Sep 17 00:00:00 2001 From: tigercl Date: Fri, 21 Jun 2019 19:51:58 +0800 Subject: [PATCH] Using fixed topic for system message of alarm (#2647) * Using fixed topic for system message of alarm --- src/emqx_alarm_handler.erl | 23 +++++++++++++++-------- test/emqx_alarm_handler_SUITE.erl | 4 ++-- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/emqx_alarm_handler.erl b/src/emqx_alarm_handler.erl index 51e112779..a7654e32c 100644 --- a/src/emqx_alarm_handler.erl +++ b/src/emqx_alarm_handler.erl @@ -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)}]). + emqx_json:safe_encode([{id, maybe_to_binary(AlarmId)}, + {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; diff --git a/test/emqx_alarm_handler_SUITE.erl b/test/emqx_alarm_handler_SUITE.erl index 25a8303e6..1e7223320 100644 --- a/test/emqx_alarm_handler_SUITE.erl +++ b/test/emqx_alarm_handler_SUITE.erl @@ -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(