diff --git a/apps/emqx_dashboard/src/emqx_dashboard_monitor.erl b/apps/emqx_dashboard/src/emqx_dashboard_monitor.erl index ad95e8678..7916a6b58 100644 --- a/apps/emqx_dashboard/src/emqx_dashboard_monitor.erl +++ b/apps/emqx_dashboard/src/emqx_dashboard_monitor.erl @@ -173,7 +173,9 @@ handle_call(current_rate, _From, State = #state{last = Last}) -> NowTime = erlang:system_time(millisecond), NowSamplers = sample(NowTime), Rate = cal_rate(NowSamplers, Last), - {reply, {ok, Rate}, State}; + NonRateValue = non_rate_value(), + Samples = maps:merge(Rate, NonRateValue), + {reply, {ok, Samples}, State}; handle_call(_Request, _From, State = #state{}) -> {reply, ok, State}. @@ -409,3 +411,21 @@ stats(received_bytes) -> emqx_metrics:val('bytes.received'); stats(sent) -> emqx_metrics:val('messages.sent'); stats(sent_bytes) -> emqx_metrics:val('bytes.sent'); stats(dropped) -> emqx_metrics:val('messages.dropped'). + +%% ------------------------------------------------------------------------------------------------- +%% Retained && License Quota + +%% the non rate values should be same on all nodes +non_rate_value() -> + #{ + retained_msg_count => emqx_retainer:retained_count(), + license_quota => license_quota() + }. + +license_quota() -> + case emqx_license_checker:limits() of + {ok, #{max_connections := Quota}} -> + Quota; + {error, no_license} -> + 0 + end. diff --git a/apps/emqx_dashboard/src/emqx_dashboard_monitor_api.erl b/apps/emqx_dashboard/src/emqx_dashboard_monitor_api.erl index a152531f1..309137362 100644 --- a/apps/emqx_dashboard/src/emqx_dashboard_monitor_api.erl +++ b/apps/emqx_dashboard/src/emqx_dashboard_monitor_api.erl @@ -1,5 +1,17 @@ %%-------------------------------------------------------------------- -%% Copyright (c) 2019-2023 EMQ Technologies Co., Ltd. All Rights Reserved. +%% Copyright (c) 2020-2024 EMQ Technologies Co., Ltd. All Rights Reserved. +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. %%-------------------------------------------------------------------- -module(emqx_dashboard_monitor_api). diff --git a/apps/emqx_retainer/src/emqx_retainer_api.erl b/apps/emqx_retainer/src/emqx_retainer_api.erl index bb232f9e4..6d5eee477 100644 --- a/apps/emqx_retainer/src/emqx_retainer_api.erl +++ b/apps/emqx_retainer/src/emqx_retainer_api.erl @@ -44,7 +44,11 @@ api_spec() -> emqx_dashboard_swagger:spec(?MODULE, #{check_schema => true}). paths() -> - [?PREFIX, ?PREFIX ++ "/messages", ?PREFIX ++ "/message/:topic"]. + [ + ?PREFIX, + ?PREFIX ++ "/messages", + ?PREFIX ++ "/message/:topic" + ]. schema(?PREFIX) -> #{