chore(presence): more fields for disconnected event

This commit is contained in:
JianBo He 2021-07-06 19:43:29 +08:00
parent 8935d28ed4
commit 05b16c601b
3 changed files with 40 additions and 31 deletions

View File

@ -52,46 +52,50 @@ 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,
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,
ts => erlang:system_time(millisecond)
disconnected_at => DisconnectedAt
},
case emqx_json:safe_encode(Presence) of
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
common_infos(
_ClientInfo = #{clientid := ClientId,
username := Username,
peerhost := PeerHost,
sockport := SockPort
},
#{clean_start := CleanStart,
proto_name := ProtoName,
proto_ver := ProtoVer,
keepalive := Keepalive,
connected_at := ConnectedAt,
expiry_interval := ExpiryInterval
_ConnInfo = #{proto_name := ProtoName,
proto_ver := ProtoVer
}) ->
#{clientid => ClientId,
username => Username,
@ -99,11 +103,6 @@ connected_presence(#{peerhost := 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)
}.

View File

@ -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, []}},

View File

@ -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, []}
]},
{<<".*">>, []}