From 6207e93e930a15d99222d0ae80392babf9c947d0 Mon Sep 17 00:00:00 2001 From: k32 <10274441+k32@users.noreply.github.com> Date: Thu, 13 Jan 2022 11:38:04 +0100 Subject: [PATCH] refactor(dashboard): Decorate remote procedure calls --- .../src/emqx_dashboard_collection.erl | 7 +++- .../src/emqx_dashboard_monitor_api.erl | 18 +++------ .../src/proto/emqx_dashboard_proto_v1.erl | 40 +++++++++++++++++++ 3 files changed, 51 insertions(+), 14 deletions(-) create mode 100644 apps/emqx_dashboard/src/proto/emqx_dashboard_proto_v1.erl diff --git a/apps/emqx_dashboard/src/emqx_dashboard_collection.erl b/apps/emqx_dashboard/src/emqx_dashboard_collection.erl index 00f9d6d10..e0b57432c 100644 --- a/apps/emqx_dashboard/src/emqx_dashboard_collection.erl +++ b/apps/emqx_dashboard/src/emqx_dashboard_collection.erl @@ -20,7 +20,7 @@ , code_change/3 ]). --export([get_collect/0]). +-export([get_collect/0, select_data/0]). -export([get_universal_epoch/0]). @@ -52,6 +52,11 @@ start_link() -> get_collect() -> gen_server:call(whereis(?MODULE), get_collect). +-spec select_data() -> [#mqtt_collect{}]. +select_data() -> + Time = emqx_dashboard_collection:get_universal_epoch() - 7200000, + ets:select(?TAB_COLLECT, [{{mqtt_collect,'$1','$2'}, [{'>', '$1', Time}], ['$_']}]). + init([]) -> timer(next_interval(), collect), timer(get_today_remaining_seconds(), clear_expire_data), diff --git a/apps/emqx_dashboard/src/emqx_dashboard_monitor_api.erl b/apps/emqx_dashboard/src/emqx_dashboard_monitor_api.erl index c6fc4d7cf..e9bc62521 100644 --- a/apps/emqx_dashboard/src/emqx_dashboard_monitor_api.erl +++ b/apps/emqx_dashboard/src/emqx_dashboard_monitor_api.erl @@ -215,10 +215,8 @@ list_collect(Aggregate) -> merger_counters(Counters) end. -get_collect(Node) when Node =:= node() -> - emqx_dashboard_collection:get_collect(); get_collect(Node) -> - case rpc:call(Node, emqx_dashboard_collection, get_collect, []) of + case emqx_dashboard_proto_v1:get_collect(Node) of {badrpc, _Reason} -> ?EMPTY_COLLECTION; Res -> Res end. @@ -267,19 +265,13 @@ key_replace([Term | List], All, Comparison, Default) -> key_replace(List, All, Comparison, Default) end. -sampling(Node) when Node =:= node() -> - format(lists:sort(select_data())); sampling(Node) -> - rpc:call(Node, ?MODULE, sampling, [Node]). + Data = emqx_dashboard_proto_v1:select_data(Node), + format(lists:sort(Data)). -sampling(Node, Counter) when Node =:= node() -> - format_single(lists:sort(select_data()), Counter); sampling(Node, Counter) -> - rpc:call(Node, ?MODULE, sampling, [Node, Counter]). - -select_data() -> - Time = emqx_dashboard_collection:get_universal_epoch() - 7200000, - ets:select(?TAB_COLLECT, [{{mqtt_collect,'$1','$2'}, [{'>', '$1', Time}], ['$_']}]). + Data = emqx_dashboard_proto_v1:select_data(Node), + format_single(lists:sort(Data), Counter). format(Collects) -> format(Collects, {[],[],[],[],[],[]}). diff --git a/apps/emqx_dashboard/src/proto/emqx_dashboard_proto_v1.erl b/apps/emqx_dashboard/src/proto/emqx_dashboard_proto_v1.erl new file mode 100644 index 000000000..6cf562983 --- /dev/null +++ b/apps/emqx_dashboard/src/proto/emqx_dashboard_proto_v1.erl @@ -0,0 +1,40 @@ +%%-------------------------------------------------------------------- +%% Copyright (c) 2022 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_proto_v1). + +-behaviour(emqx_bpapi). + +-export([ introduced_in/0 + + , get_collect/1 + , select_data/1 + ]). + +-include("emqx_dashboard.hrl"). +-include_lib("emqx/include/bpapi.hrl"). + +introduced_in() -> + "5.0.0". + +-spec get_collect(node()) -> _. +get_collect(Node) -> + rpc:call(Node, emqx_dashboard_collection, get_collect, []). + +-spec select_data(node()) -> [#mqtt_collect{}] + | emqx_rpc:badrpc(). +select_data(Node) -> + rpc:call(Node, emqx_dashboard_collection, select_data, []).