Merge pull request #10568 from paulozulato/feat-shutdown-count

feat: add shutdown count
This commit is contained in:
Paulo Zulato 2023-05-08 15:07:51 -03:00 committed by GitHub
commit 83c4b2f2d4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 52 additions and 3 deletions

View File

@ -35,7 +35,8 @@
current_conns/2, current_conns/2,
max_conns/2, max_conns/2,
id_example/0, id_example/0,
default_max_conn/0 default_max_conn/0,
shutdown_count/2
]). ]).
-export([ -export([
@ -195,6 +196,17 @@ max_conns(Type, Name, _ListenOn) when Type =:= ws; Type =:= wss ->
max_conns(_, _, _) -> max_conns(_, _, _) ->
{error, not_support}. {error, not_support}.
shutdown_count(ID, ListenOn) ->
{ok, #{type := Type, name := Name}} = parse_listener_id(ID),
shutdown_count(Type, Name, ListenOn).
shutdown_count(Type, Name, ListenOn) when Type == tcp; Type == ssl ->
esockd:get_shutdown_count({listener_id(Type, Name), ListenOn});
shutdown_count(Type, _Name, _ListenOn) when Type =:= ws; Type =:= wss ->
[];
shutdown_count(_, _, _) ->
{error, not_support}.
%% @doc Start all listeners. %% @doc Start all listeners.
-spec start() -> ok. -spec start() -> ok.
start() -> start() ->

View File

@ -67,7 +67,8 @@ groups() ->
%% t_keepalive, %% t_keepalive,
%% t_redelivery_on_reconnect, %% t_redelivery_on_reconnect,
%% subscribe_failure_test, %% subscribe_failure_test,
t_dollar_topics t_dollar_topics,
t_sub_non_utf8_topic
]}, ]},
{mqttv5, [non_parallel_tests], [t_basic_with_props_v5]}, {mqttv5, [non_parallel_tests], [t_basic_with_props_v5]},
{others, [non_parallel_tests], [ {others, [non_parallel_tests], [
@ -297,6 +298,36 @@ t_dollar_topics(_) ->
ok = emqtt:disconnect(C), ok = emqtt:disconnect(C),
ct:pal("$ topics test succeeded"). ct:pal("$ topics test succeeded").
t_sub_non_utf8_topic(_) ->
{ok, Socket} = gen_tcp:connect({127, 0, 0, 1}, 1883, [{active, true}, binary]),
ConnPacket = emqx_frame:serialize(#mqtt_packet{
header = #mqtt_packet_header{type = 1},
variable = #mqtt_packet_connect{
clientid = <<"abcdefg">>
}
}),
ok = gen_tcp:send(Socket, ConnPacket),
receive
{tcp, _, _ConnAck = <<32, 2, 0, 0>>} -> ok
after 3000 -> ct:fail({connect_ack_not_recv, process_info(self(), messages)})
end,
SubHeader = <<130, 18, 25, 178>>,
SubTopicLen = <<0, 13>>,
%% this is not a valid utf8 topic
SubTopic = <<128, 10, 10, 12, 178, 159, 162, 47, 115, 1, 1, 1, 1>>,
SubQoS = <<1>>,
SubPacket = <<SubHeader/binary, SubTopicLen/binary, SubTopic/binary, SubQoS/binary>>,
ok = gen_tcp:send(Socket, SubPacket),
receive
{tcp_closed, _} -> ok
after 3000 -> ct:fail({should_get_disconnected, process_info(self(), messages)})
end,
timer:sleep(1000),
ListenerCounts = emqx_listeners:shutdown_count('tcp:default', {{0, 0, 0, 0}, 1883}),
TopicInvalidCount = proplists:get_value(topic_filter_invalid, ListenerCounts),
?assert(is_integer(TopicInvalidCount) andalso TopicInvalidCount > 0),
ok.
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% Test cases for MQTT v5 %% Test cases for MQTT v5
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------

View File

@ -615,13 +615,18 @@ listeners([]) ->
{error, _} -> []; {error, _} -> [];
MC -> [{max_conns, MC}] MC -> [{max_conns, MC}]
end, end,
ShutdownCount =
case emqx_listeners:shutdown_count(ID, Bind) of
{error, _} -> [];
SC -> [{shutdown_count, SC}]
end,
Info = Info =
[ [
{listen_on, {string, emqx_listeners:format_bind(Bind)}}, {listen_on, {string, emqx_listeners:format_bind(Bind)}},
{acceptors, Acceptors}, {acceptors, Acceptors},
{proxy_protocol, ProxyProtocol}, {proxy_protocol, ProxyProtocol},
{running, Running} {running, Running}
] ++ CurrentConns ++ MaxConn, ] ++ CurrentConns ++ MaxConn ++ ShutdownCount,
emqx_ctl:print("~ts~n", [ID]), emqx_ctl:print("~ts~n", [ID]),
lists:foreach(fun indent_print/1, Info) lists:foreach(fun indent_print/1, Info)
end, end,

View File

@ -0,0 +1 @@
Add shutdown counter information to `emqx ctl listeners` command