Просмотр исходного кода

chore: ensure connected_at field for connect/connack/disconnected event

JianBo He 4 лет назад
Родитель
Сommit
ad996afe47

+ 3 - 0
apps/emqx_web_hook/src/emqx_web_hook.erl

@@ -93,6 +93,7 @@ on_client_connect(ConnInfo = #{clientid := ClientId, username := Username, peern
               , ipaddress => iolist_to_binary(ntoa(Peerhost))
               , keepalive => maps:get(keepalive, ConnInfo)
               , proto_ver => maps:get(proto_ver, ConnInfo)
+              , connected_at => maps:get(connected_at, ConnInfo)
               },
     send_http_request(ClientId, Params).
 
@@ -109,6 +110,7 @@ on_client_connack(ConnInfo = #{clientid := ClientId, username := Username, peern
               , ipaddress => iolist_to_binary(ntoa(Peerhost))
               , keepalive => maps:get(keepalive, ConnInfo)
               , proto_ver => maps:get(proto_ver, ConnInfo)
+              , connected_at => maps:get(connected_at, ConnInfo)
               , conn_ack => Rc
               },
     send_http_request(ClientId, Params).
@@ -143,6 +145,7 @@ on_client_disconnected(#{clientid := ClientId, username := Username}, Reason, Co
               , clientid => ClientId
               , username => maybe(Username)
               , reason => stringfy(maybe(Reason))
+              , connected_at => maps:get(connected_at, ConnInfo)
               , disconnected_at => maps:get(disconnected_at, ConnInfo, erlang:system_time(millisecond))
               },
     send_http_request(ClientId, Params).

+ 4 - 1
apps/emqx_web_hook/test/props/prop_webhook_hooks.erl

@@ -52,7 +52,8 @@ prop_client_connect() ->
                       username => maybe(maps:get(username, ConnInfo)),
                       ipaddress => peer2addr(maps:get(peername, ConnInfo)),
                       keepalive => maps:get(keepalive, ConnInfo),
-                      proto_ver => maps:get(proto_ver, ConnInfo)
+                      proto_ver => maps:get(proto_ver, ConnInfo),
+                      connected_at => maps:get(connected_at, ConnInfo)
                      }),
            true
        end).
@@ -71,6 +72,7 @@ prop_client_connack() ->
                        ipaddress => peer2addr(maps:get(peername, ConnInfo)),
                        keepalive => maps:get(keepalive, ConnInfo),
                        proto_ver => maps:get(proto_ver, ConnInfo),
+                       connected_at => maps:get(connected_at, ConnInfo),
                        conn_ack => Rc
                        }),
             true
@@ -106,6 +108,7 @@ prop_client_disconnected() ->
                        node => stringfy(node()),
                        clientid => maps:get(clientid, ClientInfo),
                        username => maybe(maps:get(username, ClientInfo)),
+                       connected_at => maps:get(connected_at, ConnInfo),
                        disconnected_at => maps:get(disconnected_at, ConnInfo),
                        reason => stringfy(Reason)
                       }),

+ 4 - 3
lib-ce/emqx_modules/src/emqx_mod_presence.erl

@@ -57,8 +57,7 @@ on_client_connected(ClientInfo = #{clientid := ClientId}, ConnInfo, Env) ->
                   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)
+                  expiry_interval => maps:get(expiry_interval, ConnInfo, 0)
                  },
     case emqx_json:safe_encode(NPresence) of
         {ok, Payload} ->
@@ -95,7 +94,8 @@ common_infos(
                   sockport := SockPort
                  },
   _ConnInfo = #{proto_name := ProtoName,
-                proto_ver := ProtoVer
+                proto_ver := ProtoVer,
+                connected_at := ConnectedAt
                }) ->
     #{clientid => ClientId,
       username => Username,
@@ -103,6 +103,7 @@ common_infos(
       sockport => SockPort,
       proto_name => ProtoName,
       proto_ver => ProtoVer,
+      connected_at => ConnectedAt,
       ts => erlang:system_time(millisecond)
      }.