From 05b16c601b7f63342cf9b0dcd7f3bf97aa2785cc Mon Sep 17 00:00:00 2001 From: JianBo He Date: Tue, 6 Jul 2021 19:43:29 +0800 Subject: [PATCH] chore(presence): more fields for disconnected event --- lib-ce/emqx_modules/src/emqx_mod_presence.erl | 59 +++++++++---------- lib-ce/emqx_modules/src/emqx_modules.app.src | 2 +- .../emqx_modules/src/emqx_modules.appup.src | 10 ++++ 3 files changed, 40 insertions(+), 31 deletions(-) diff --git a/lib-ce/emqx_modules/src/emqx_mod_presence.erl b/lib-ce/emqx_modules/src/emqx_mod_presence.erl index 7ba147c9a..01a60218c 100644 --- a/lib-ce/emqx_modules/src/emqx_mod_presence.erl +++ b/lib-ce/emqx_modules/src/emqx_mod_presence.erl @@ -52,58 +52,57 @@ description() -> %%-------------------------------------------------------------------- on_client_connected(ClientInfo = #{clientid := ClientId}, ConnInfo, Env) -> - Presence = connected_presence(ClientInfo, ConnInfo), - case emqx_json:safe_encode(Presence) of + Presence = common_infos(ClientInfo, ConnInfo), + NPresence = Presence#{ + connack => 0, %% XXX: connack will be removed in 5.0 + keepalive => maps:get(keepalive, ConnInfo, 0), + clean_start => maps:get(clean_start, ConnInfo, true), + expiry_interval => maps:get(expiry_interval, ConnInfo, 0), + connected_at => maps:get(connected_at, ConnInfo) + }, + case emqx_json:safe_encode(NPresence) of {ok, Payload} -> emqx_broker:safe_publish( make_msg(qos(Env), topic(connected, ClientId), Payload)); {error, _Reason} -> - ?LOG(error, "Failed to encode 'connected' presence: ~p", [Presence]) + ?LOG(error, "Failed to encode 'connected' presence: ~p", [NPresence]) end. -on_client_disconnected(_ClientInfo = #{clientid := ClientId, username := Username}, - Reason, _ConnInfo = #{disconnected_at := DisconnectedAt}, Env) -> - Presence = #{clientid => ClientId, - username => Username, - reason => reason(Reason), - disconnected_at => DisconnectedAt, - ts => erlang:system_time(millisecond) - }, - case emqx_json:safe_encode(Presence) of +on_client_disconnected(ClientInfo = #{clientid := ClientId}, + Reason, ConnInfo = #{disconnected_at := DisconnectedAt}, Env) -> + + Presence = common_infos(ClientInfo, ConnInfo), + NPresence = Presence#{ + reason => reason(Reason), + disconnected_at => DisconnectedAt + }, + case emqx_json:safe_encode(NPresence) of {ok, Payload} -> emqx_broker:safe_publish( make_msg(qos(Env), topic(disconnected, ClientId), Payload)); {error, _Reason} -> - ?LOG(error, "Failed to encode 'disconnected' presence: ~p", [Presence]) + ?LOG(error, "Failed to encode 'disconnected' presence: ~p", [NPresence]) end. %%-------------------------------------------------------------------- %% Helper functions %%-------------------------------------------------------------------- -connected_presence(#{peerhost := PeerHost, - sockport := SockPort, - clientid := ClientId, - username := Username - }, - #{clean_start := CleanStart, - proto_name := ProtoName, - proto_ver := ProtoVer, - keepalive := Keepalive, - connected_at := ConnectedAt, - expiry_interval := ExpiryInterval - }) -> +common_infos( + _ClientInfo = #{clientid := ClientId, + username := Username, + peerhost := PeerHost, + sockport := SockPort + }, + _ConnInfo = #{proto_name := ProtoName, + proto_ver := ProtoVer + }) -> #{clientid => ClientId, username => Username, ipaddress => ntoa(PeerHost), sockport => SockPort, proto_name => ProtoName, proto_ver => ProtoVer, - keepalive => Keepalive, - connack => 0, %% Deprecated? - clean_start => CleanStart, - expiry_interval => ExpiryInterval, - connected_at => ConnectedAt, ts => erlang:system_time(millisecond) }. diff --git a/lib-ce/emqx_modules/src/emqx_modules.app.src b/lib-ce/emqx_modules/src/emqx_modules.app.src index 702652fc2..bcb05fe31 100644 --- a/lib-ce/emqx_modules/src/emqx_modules.app.src +++ b/lib-ce/emqx_modules/src/emqx_modules.app.src @@ -1,6 +1,6 @@ {application, emqx_modules, [{description, "EMQ X Module Management"}, - {vsn, "4.3.2"}, + {vsn, "4.3.3"}, {modules, []}, {applications, [kernel,stdlib]}, {mod, {emqx_modules_app, []}}, diff --git a/lib-ce/emqx_modules/src/emqx_modules.appup.src b/lib-ce/emqx_modules/src/emqx_modules.appup.src index aa997c453..f52ba1a61 100644 --- a/lib-ce/emqx_modules/src/emqx_modules.appup.src +++ b/lib-ce/emqx_modules/src/emqx_modules.appup.src @@ -1,21 +1,31 @@ %% -*-: erlang -*- {VSN, [ + {"4.3.2", [ + {load_module, emqx_mod_presence, brutal_purge, soft_purge, []} + ]}, {"4.3.1", [ + {load_module, emqx_mod_presence, brutal_purge, soft_purge, []}, {load_module, emqx_mod_api_topic_metrics, brutal_purge, soft_purge, []} ]}, {"4.3.0", [ {update, emqx_mod_delayed, {advanced, []}}, + {load_module, emqx_mod_presence, brutal_purge, soft_purge, []}, {load_module, emqx_mod_api_topic_metrics, brutal_purge, soft_purge, []} ]}, {<<".*">>, []} ], [ + {"4.3.2", [ + {load_module, emqx_mod_presence, brutal_purge, soft_purge, []} + ]}, {"4.3.1", [ + {load_module, emqx_mod_presence, brutal_purge, soft_purge, []}, {load_module, emqx_mod_api_topic_metrics, brutal_purge, soft_purge, []} ]}, {"4.3.0", [ {update, emqx_mod_delayed, {advanced, []}}, + {load_module, emqx_mod_presence, brutal_purge, soft_purge, []}, {load_module, emqx_mod_api_topic_metrics, brutal_purge, soft_purge, []} ]}, {<<".*">>, []}