From a8bb2a60b08be99d14646161968a1ce327392806 Mon Sep 17 00:00:00 2001 From: JimMoen Date: Tue, 12 Oct 2021 10:27:27 +0800 Subject: [PATCH] fix(gateway_api): client ip and port as two fields when clients query --- .../src/emqx_gateway_api_clients.erl | 18 +++++++++++------- .../src/emqx_mgmt_api_clients.erl | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/apps/emqx_gateway/src/emqx_gateway_api_clients.erl b/apps/emqx_gateway/src/emqx_gateway_api_clients.erl index 58723cd22..a436c6935 100644 --- a/apps/emqx_gateway/src/emqx_gateway_api_clients.erl +++ b/apps/emqx_gateway/src/emqx_gateway_api_clients.erl @@ -230,7 +230,7 @@ ms(username, X) -> ms(zone, X) -> #{clientinfo => #{zone => X}}; ms(ip_address, X) -> - #{clientinfo => #{peerhost => X}}; + #{clientinfo => #{peername => {X, '_'}}}; ms(conn_state, X) -> #{conn_state => X}; ms(clean_start, X) -> @@ -276,7 +276,8 @@ format_channel_info({_, Infos, Stats}) -> , {username, ClientInfo} , {proto_name, ConnInfo} , {proto_ver, ConnInfo} - , {ip_address, {peername, ConnInfo, fun peer_to_binary/1}} + , {ip_address, {peername, ConnInfo, fun peer_to_binary_addr/1}} + , {port, {peername, ConnInfo, fun peer_to_port/1}} , {is_bridge, ClientInfo, false} , {connected_at, {connected_at, ConnInfo, fun emqx_gateway_utils:unix_ts_to_rfc3339/1}} @@ -341,13 +342,14 @@ key_get(K, M) when is_map(M) -> key_get(K, L) when is_list(L) -> proplists:get_value(K, L). -peer_to_binary({Addr, Port}) -> - AddrBinary = list_to_binary(inet:ntoa(Addr)), - PortBinary = integer_to_binary(Port), - <>; -peer_to_binary(Addr) -> +-spec(peer_to_binary_addr(emqx_types:peername()) -> binary()). +peer_to_binary_addr({Addr, _}) -> list_to_binary(inet:ntoa(Addr)). +-spec(peer_to_port(emqx_types:peername()) -> inet:port_number()). +peer_to_port({_, Port}) -> + Port. + conn_state_to_connected(connected) -> true; conn_state_to_connected(_) -> false. @@ -536,6 +538,8 @@ properties_client() -> <<"Protocol version used by the client">>} , {ip_address, string, <<"Client's IP address">>} + , {port, integer, + <<"Client's port">>} , {is_bridge, boolean, <<"Indicates whether the client is connectedvia bridge">>} , {connected_at, string, diff --git a/apps/emqx_management/src/emqx_mgmt_api_clients.erl b/apps/emqx_management/src/emqx_mgmt_api_clients.erl index daf978cd6..8050cf206 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_clients.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_clients.erl @@ -698,7 +698,7 @@ result_format_time_fun(Key, NClientInfoMap) -> peername_dispart({Addr, Port}) -> AddrBinary = list_to_binary(inet:ntoa(Addr)), %% PortBinary = integer_to_binary(Port), - {<>, Port}. + {AddrBinary, Port}. format_authz_cache({{PubSub, Topic}, {AuthzResult, Timestamp}}) -> #{ access => PubSub,