Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(api): field shared_subscriptions in endpoint /monitor_current #12670

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
14 changes: 14 additions & 0 deletions apps/emqx_dashboard/include/emqx_dashboard.hrl
Expand Up @@ -85,3 +85,17 @@
sent => sent_msg_rate,
dropped => dropped_msg_rate
}).

-define(CURRENT_SAMPLE_NON_RATE,
[
node_uptime,
retained_msg_count,
shared_subscriptions
] ++ ?LICENSE_QUOTA
).

-if(?EMQX_RELEASE_EDITION == ee).
-define(LICENSE_QUOTA, [license_quota]).
-else.
-define(LICENSE_QUOTA, []).
-endif.
9 changes: 6 additions & 3 deletions apps/emqx_dashboard/src/emqx_dashboard_monitor.erl
Expand Up @@ -357,8 +357,8 @@ next_interval() ->

sample(Time) ->
Fun =
fun(Key, Res) ->
maps:put(Key, getstats(Key), Res)
fun(Key, Acc) ->
Acc#{Key => getstats(Key)}
end,
Data = lists:foldl(Fun, #{}, ?SAMPLER_LIST),
#emqx_monit{time = Time, data = Data}.
Expand Down Expand Up @@ -416,6 +416,8 @@ stats(live_connections) -> emqx_stats:getstat('live_connections.count');
stats(cluster_sessions) -> emqx_stats:getstat('cluster_sessions.count');
stats(topics) -> emqx_stats:getstat('topics.count');
stats(subscriptions) -> emqx_stats:getstat('subscriptions.count');
stats(shared_subscriptions) -> emqx_stats:getstat('subscriptions.shared.count');
stats(retained_msg_count) -> emqx_stats:getstat('retained.count');
stats(received) -> emqx_metrics:val('messages.received');
stats(received_bytes) -> emqx_metrics:val('bytes.received');
stats(sent) -> emqx_metrics:val('messages.sent');
Expand All @@ -428,7 +430,8 @@ stats(dropped) -> emqx_metrics:val('messages.dropped').
%% the non rate values should be same on all nodes
non_rate_value() ->
(license_quota())#{
retained_msg_count => emqx_retainer:retained_count(),
retained_msg_count => stats(retained_msg_count),
shared_subscriptions => stats(shared_subscriptions),
node_uptime => emqx_sys:uptime()
}.

Expand Down
49 changes: 28 additions & 21 deletions apps/emqx_dashboard/src/emqx_dashboard_monitor_api.erl
Expand Up @@ -94,7 +94,7 @@ schema("/monitor_current/nodes/:node") ->
description => ?DESC(current_stats_node),
parameters => [parameter_node()],
responses => #{
200 => hoconsc:mk(hoconsc:ref(sampler_current), #{}),
200 => hoconsc:mk(hoconsc:ref(sampler_current_node), #{}),
404 => emqx_dashboard_swagger:error_codes(['NOT_FOUND'], <<"Node not found">>)
}
}
Expand Down Expand Up @@ -125,8 +125,17 @@ fields(sampler) ->
|| SamplerName <- ?SAMPLER_LIST
],
[{time_stamp, hoconsc:mk(non_neg_integer(), #{desc => <<"Timestamp">>})} | Samplers];
fields(sampler_current_node) ->
fields_current(sample_names(sampler_current_node));
fields(sampler_current) ->
Names = maps:values(?DELTA_SAMPLER_RATE_MAP) ++ ?GAUGE_SAMPLER_LIST,
fields_current(sample_names(sampler_current)).

sample_names(sampler_current_node) ->
maps:values(?DELTA_SAMPLER_RATE_MAP) ++ ?GAUGE_SAMPLER_LIST ++ ?CURRENT_SAMPLE_NON_RATE;
sample_names(sampler_current) ->
sample_names(sampler_current_node) -- [node_uptime].

fields_current(Names) ->
[
{SamplerName, hoconsc:mk(integer(), #{desc => swagger_desc(SamplerName)})}
|| SamplerName <- Names
Expand Down Expand Up @@ -167,6 +176,8 @@ current_rate(Node) ->
%% -------------------------------------------------------------------------------------------------
%% Internal

-define(APPROXIMATE_DESC, " Can only represent an approximate state.").

swagger_desc(received) ->
swagger_desc_format("Received messages ");
swagger_desc(received_bytes) ->
Expand All @@ -178,30 +189,18 @@ swagger_desc(sent_bytes) ->
swagger_desc(dropped) ->
swagger_desc_format("Dropped messages ");
swagger_desc(subscriptions) ->
<<
"Subscriptions at the time of sampling."
" Can only represent the approximate state"
>>;
<<"Subscriptions at the time of sampling.", ?APPROXIMATE_DESC>>;
swagger_desc(topics) ->
<<
"Count topics at the time of sampling."
" Can only represent the approximate state"
>>;
<<"Count topics at the time of sampling.", ?APPROXIMATE_DESC>>;
swagger_desc(connections) ->
<<
"Sessions at the time of sampling."
" Can only represent the approximate state"
>>;
<<"Sessions at the time of sampling.", ?APPROXIMATE_DESC>>;
swagger_desc(live_connections) ->
<<
"Connections at the time of sampling."
" Can only represent the approximate state"
>>;
<<"Connections at the time of sampling.", ?APPROXIMATE_DESC>>;
swagger_desc(cluster_sessions) ->
<<
"Total number of sessions in the cluster at the time of sampling. "
"It includes expired sessions when `broker.session_history_retain` is set to a duration greater than `0s`. "
"Can only represent the approximate state"
"It includes expired sessions when `broker.session_history_retain` is set to a duration greater than `0s`."
?APPROXIMATE_DESC
>>;
swagger_desc(received_msg_rate) ->
swagger_desc_format("Dropped messages ", per);
Expand All @@ -210,7 +209,15 @@ swagger_desc(sent_msg_rate) ->
swagger_desc_format("Sent messages ", per);
%swagger_desc(sent_bytes_rate) -> swagger_desc_format("Sent bytes ", per);
swagger_desc(dropped_msg_rate) ->
swagger_desc_format("Dropped messages ", per).
swagger_desc_format("Dropped messages ", per);
swagger_desc(retained_msg_count) ->
<<"Retained messages count at the time of sampling.", ?APPROXIMATE_DESC>>;
swagger_desc(shared_subscriptions) ->
<<"Shared subscriptions count at the time of sampling.", ?APPROXIMATE_DESC>>;
swagger_desc(node_uptime) ->
<<"Node up time in seconds. Only presented in endpoint: `/monitor_current/nodes/:node`.">>;
swagger_desc(license_quota) ->
<<"License quota. AKA: limited max_connections for cluster">>.

swagger_desc_format(Format) ->
swagger_desc_format(Format, last).
Expand Down
1 change: 1 addition & 0 deletions changes/ce/feat-12670.en.md
@@ -0,0 +1 @@
Add field `shared_subscriptions` to endpoint `/monitor_current` and `/monitor_current/nodes/:node`.