diff --git a/src/emqx_vm.erl b/src/emqx_vm.erl index 3971de56d..e55e7d18f 100644 --- a/src/emqx_vm.erl +++ b/src/emqx_vm.erl @@ -44,11 +44,6 @@ , get_ets_object/1 ]). --export([ get_port_types/0 - , get_port_info/0 - , get_port_info/1 - ]). - -export([cpu_util/0]). -ifdef(TEST). @@ -361,98 +356,6 @@ get_ets_object(Tab) -> ets:tab2list(Tab) end. -get_port_types() -> - lists:usort(fun({KA, VA},{KB, VB})-> {VA, KB} >{VB, KA} end, - ports_type_count([Type || {_Port, Type} <- ports_type_list()])). - -get_port_info() -> - [get_port_info(Port) ||Port <- erlang:ports()]. - -get_port_info(PortTerm) -> - Port = transform_port(PortTerm), - [port_info(Port, Type) || Type <- [meta, signals, io, memory_used, specific]]. - -port_info(Port, meta) -> - {meta, List} = port_info_type(Port, meta, [id, name, os_pid]), - case port_info(Port, registered_name) of - [] -> {meta, List}; - Name -> {meta, [Name | List]} - end; - -port_info(PortTerm, signals) -> - port_info_type(PortTerm, signals, [connected, links, monitors]); - -port_info(PortTerm, io) -> - port_info_type(PortTerm, io, [input, output]); - -port_info(PortTerm, memory_used) -> - port_info_type(PortTerm, memory_used, [memory, queue_size]); - -port_info(PortTerm, specific) -> - Port = transform_port(PortTerm), - Props = case erlang:port_info(Port, name) of - {_, Type} when Type =:= "udp_inet"; - Type =:= "tcp_inet"; - Type =:= "sctp_inet" -> - try inet:getstat(Port) of - {ok, Stats} -> [{statistics, Stats}]; - {error, _} -> [] - catch - _Error:_Reason -> [] - end ++ - try inet:peername(Port) of - {ok, Peer} -> [{peername, Peer}]; - _ -> [] - catch - _Error:_Reason -> [] - end ++ - try inet:sockname(Port) of - {ok, Local} -> [{sockname, Local}]; - {error, _} -> [] - catch - _Error:_Reason -> [] - end ++ - try inet:getopts(Port, ?SOCKET_OPTS ) of - {ok, Opts} -> [{options, Opts}]; - {error, _} -> [] - catch - _Error:_Reason -> [] - end; - {_, "efile"} -> - []; - _ -> - [] - end, - {specific, Props}; -port_info(PortTerm, Key) when is_atom(Key) -> - Port = transform_port(PortTerm), - erlang:port_info(Port, Key). - -port_info_type(PortTerm, Type, Keys) -> - Port = transform_port(PortTerm), - {Type, [erlang:port_info(Port, Key) || Key <- Keys]}. - -transform_port(Port) when is_port(Port) -> Port; -transform_port("#Port<0." ++ Id) -> - N = list_to_integer(lists:sublist(Id, length(Id) - 1)), - transform_port(N); -transform_port(N) when is_integer(N) -> - Name = iolist_to_binary(atom_to_list(node())), - NameLen = iolist_size(Name), - Vsn = binary:last(term_to_binary(self())), - Bin = <<131, 102, 100, NameLen:2/unit:8, Name:NameLen/binary, N:4/unit:8, Vsn:8>>, - binary_to_term(Bin). - -ports_type_list() -> - [{Port, PortType} || Port <- erlang:ports(), - {_, PortType} <- [erlang:port_info(Port, name)]]. - -ports_type_count(Types) -> - DictTypes = lists:foldl(fun(Type, Acc)-> - dict:update_counter(Type, 1, Acc) - end, dict:new(), Types), - dict:to_list(DictTypes). - mapping(Entries) -> mapping(Entries, []). mapping([], Acc) -> Acc; diff --git a/test/emqx_vm_SUITE.erl b/test/emqx_vm_SUITE.erl index 4bc231ad0..156422a2d 100644 --- a/test/emqx_vm_SUITE.erl +++ b/test/emqx_vm_SUITE.erl @@ -70,24 +70,6 @@ t_get_ets_object(_Config) -> ets:insert(test, {k, v}), [{k, v}] = emqx_vm:get_ets_object(test). -t_get_port_types(_Config) -> - emqx_vm:get_port_types(). - -t_get_port_info(_Config) -> - emqx_vm:get_port_info(), - spawn(fun easy_server/0), - ct:sleep(100), - {ok, Sock} = gen_tcp:connect("localhost", 5678, [binary, {packet, 0}]), - emqx_vm:get_port_info(), - ok = gen_tcp:close(Sock), - [_Port | _] = erlang:ports(). - -t_transform_port(_Config) -> - [Port | _] = erlang:ports(), - ?assertEqual(Port, emqx_vm:transform_port(Port)), - <<131, 102, 100, NameLen:2/unit:8, _Name:NameLen/binary, N:4/unit:8, _Vsn:8>> = erlang:term_to_binary(Port), - ?assertEqual(Port, emqx_vm:transform_port("#Port<0." ++ integer_to_list(N) ++ ">")). - t_scheduler_usage(_Config) -> emqx_vm:scheduler_usage(5000).