Merge pull request #10948 from HJianBo/live-conns-http-api
feat: add `live_connections` field for some HTTP APIs
This commit is contained in:
commit
6fe99be367
|
@ -61,7 +61,8 @@
|
|||
-define(GAUGE_SAMPLER_LIST, [
|
||||
subscriptions,
|
||||
topics,
|
||||
connections
|
||||
connections,
|
||||
live_connections
|
||||
]).
|
||||
|
||||
-define(SAMPLER_LIST, ?GAUGE_SAMPLER_LIST ++ ?DELTA_SAMPLER_LIST).
|
||||
|
|
|
@ -401,6 +401,7 @@ getstats(Key) ->
|
|||
end.
|
||||
|
||||
stats(connections) -> emqx_stats:getstat('connections.count');
|
||||
stats(live_connections) -> emqx_stats:getstat('live_connections.count');
|
||||
stats(topics) -> emqx_stats:getstat('topics.count');
|
||||
stats(subscriptions) -> emqx_stats:getstat('subscriptions.count');
|
||||
stats(received) -> emqx_metrics:val('messages.received');
|
||||
|
|
|
@ -171,6 +171,11 @@ swagger_desc(topics) ->
|
|||
" Can only represent the approximate state"
|
||||
>>;
|
||||
swagger_desc(connections) ->
|
||||
<<
|
||||
"Sessions at the time of sampling."
|
||||
" Can only represent the approximate state"
|
||||
>>;
|
||||
swagger_desc(live_connections) ->
|
||||
<<
|
||||
"Connections at the time of sampling."
|
||||
" Can only represent the approximate state"
|
||||
|
|
|
@ -90,6 +90,27 @@ t_monitor_current_api(_) ->
|
|||
],
|
||||
ok.
|
||||
|
||||
t_monitor_current_api_live_connections(_) ->
|
||||
process_flag(trap_exit, true),
|
||||
ClientId = <<"live_conn_tests">>,
|
||||
ClientId1 = <<"live_conn_tests1">>,
|
||||
{ok, C} = emqtt:start_link([{clean_start, false}, {clientid, ClientId}]),
|
||||
{ok, _} = emqtt:connect(C),
|
||||
ok = emqtt:disconnect(C),
|
||||
{ok, C1} = emqtt:start_link([{clean_start, true}, {clientid, ClientId1}]),
|
||||
{ok, _} = emqtt:connect(C1),
|
||||
%% waiting for emqx_stats ticker
|
||||
timer:sleep(1500),
|
||||
_ = emqx_dashboard_monitor:current_rate(),
|
||||
{ok, Rate} = request(["monitor_current"]),
|
||||
?assertEqual(1, maps:get(<<"live_connections">>, Rate)),
|
||||
?assertEqual(2, maps:get(<<"connections">>, Rate)),
|
||||
%% clears
|
||||
ok = emqtt:disconnect(C1),
|
||||
{ok, C2} = emqtt:start_link([{clean_start, true}, {clientid, ClientId}]),
|
||||
{ok, _} = emqtt:connect(C2),
|
||||
ok = emqtt:disconnect(C2).
|
||||
|
||||
t_monitor_reset(_) ->
|
||||
restart_monitor(),
|
||||
{ok, Rate} = request(["monitor_current"]),
|
||||
|
|
|
@ -142,6 +142,7 @@ node_info() ->
|
|||
max_fds, lists:usort(lists:flatten(erlang:system_info(check_io)))
|
||||
),
|
||||
connections => ets:info(?CHAN_TAB, size),
|
||||
live_connections => ets:info(?CHAN_LIVE_TAB, size),
|
||||
node_status => 'running',
|
||||
uptime => proplists:get_value(uptime, BrokerInfo),
|
||||
version => iolist_to_binary(proplists:get_value(version, BrokerInfo)),
|
||||
|
|
|
@ -151,6 +151,11 @@ fields(node_info) ->
|
|||
#{desc => <<"Node name">>, example => <<"emqx@127.0.0.1">>}
|
||||
)},
|
||||
{connections,
|
||||
mk(
|
||||
non_neg_integer(),
|
||||
#{desc => <<"Number of clients session in this node">>, example => 0}
|
||||
)},
|
||||
{live_connections,
|
||||
mk(
|
||||
non_neg_integer(),
|
||||
#{desc => <<"Number of clients currently connected to this node">>, example => 0}
|
||||
|
|
|
@ -60,6 +60,11 @@ t_nodes_api(_) ->
|
|||
Edition = maps:get(<<"edition">>, LocalNodeInfo),
|
||||
?assertEqual(emqx_release:edition_longstr(), Edition),
|
||||
|
||||
Conns = maps:get(<<"connections">>, LocalNodeInfo),
|
||||
?assertEqual(0, Conns),
|
||||
LiveConns = maps:get(<<"live_connections">>, LocalNodeInfo),
|
||||
?assertEqual(0, LiveConns),
|
||||
|
||||
NodePath = emqx_mgmt_api_test_util:api_path(["nodes", atom_to_list(node())]),
|
||||
{ok, NodeInfo} = emqx_mgmt_api_test_util:request_api(get, NodePath),
|
||||
NodeNameResponse =
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
Add `live_connections` field for some HTTP APIs, i.e:
|
||||
- `/monitor_current`, `/monitor_current/nodes/{node}`
|
||||
- `/monitor/nodes/{node}`, `/monitor`
|
||||
- `/node/{node}`, `/nodes`
|
Loading…
Reference in New Issue