From 105ec5104a81b377d564a7242b4d29cc17947017 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Fri, 25 Mar 2022 09:44:35 -0300 Subject: [PATCH] fix: set own app environment and expose convenient api ... for accessing advanced mqtt features in use. --- apps/emqx_modules/src/emqx_modules.erl | 37 +++++++++++++++++++ apps/emqx_modules/src/emqx_modules_app.erl | 2 +- apps/emqx_modules/src/emqx_telemetry.erl | 2 +- .../test/emqx_telemetry_SUITE.erl | 28 +++++--------- 4 files changed, 49 insertions(+), 20 deletions(-) create mode 100644 apps/emqx_modules/src/emqx_modules.erl diff --git a/apps/emqx_modules/src/emqx_modules.erl b/apps/emqx_modules/src/emqx_modules.erl new file mode 100644 index 000000000..7a3c6d117 --- /dev/null +++ b/apps/emqx_modules/src/emqx_modules.erl @@ -0,0 +1,37 @@ +%%-------------------------------------------------------------------- +%% 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_modules). + +-export([ + get_advanced_mqtt_features_in_use/0, + set_advanced_mqtt_features_in_use/1 +]). + +-type advanced_mqtt_feature() :: delayed | topic_rewrite | retained | auto_subscribe. +-type advanced_mqtt_features_in_use() :: #{advanced_mqtt_feature() => boolean()}. + +%%-------------------------------------------------------------------- +%% API +%%-------------------------------------------------------------------- + +-spec get_advanced_mqtt_features_in_use() -> advanced_mqtt_features_in_use(). +get_advanced_mqtt_features_in_use() -> + application:get_env(?MODULE, advanced_mqtt_features_in_use, #{}). + +-spec set_advanced_mqtt_features_in_use(advanced_mqtt_features_in_use()) -> ok. +set_advanced_mqtt_features_in_use(Features) -> + application:set_env(?MODULE, advanced_mqtt_features_in_use, Features). diff --git a/apps/emqx_modules/src/emqx_modules_app.erl b/apps/emqx_modules/src/emqx_modules_app.erl index 4fcd2718e..db4efdc07 100644 --- a/apps/emqx_modules/src/emqx_modules_app.erl +++ b/apps/emqx_modules/src/emqx_modules_app.erl @@ -38,7 +38,7 @@ maybe_enable_modules() -> RetainerEnabled = emqx_conf:get([retainer, enable], false), AutoSubscribeEnabled = length(emqx_conf:get([auto_subscribe, topics], [])) > 0, application:set_env( - emqx_telemetry, + emqx_modules, advanced_mqtt_features_in_use, #{ delayed => DelayedEnabled, diff --git a/apps/emqx_modules/src/emqx_telemetry.erl b/apps/emqx_modules/src/emqx_telemetry.erl index e15f91519..0fedf45a3 100644 --- a/apps/emqx_modules/src/emqx_telemetry.erl +++ b/apps/emqx_modules/src/emqx_telemetry.erl @@ -449,7 +449,7 @@ update_mqtt_rates(State) -> {#{}, State}. advanced_mqtt_features() -> - AdvancedFeatures = application:get_env(emqx_telemetry, advanced_mqtt_features_in_use, #{}), + AdvancedFeatures = emqx_modules:get_advanced_mqtt_features_in_use(), maps:map(fun(_K, V) -> bool2int(V) end, AdvancedFeatures). bin(L) when is_list(L) -> diff --git a/apps/emqx_modules/test/emqx_telemetry_SUITE.erl b/apps/emqx_modules/test/emqx_telemetry_SUITE.erl index 004d10d43..e6a2319e8 100644 --- a/apps/emqx_modules/test/emqx_telemetry_SUITE.erl +++ b/apps/emqx_modules/test/emqx_telemetry_SUITE.erl @@ -67,17 +67,13 @@ init_per_testcase(t_get_telemetry, Config) -> ), Config; init_per_testcase(t_advanced_mqtt_features, Config) -> - OldValues = application:get_env(emqx_telemetry, advanced_mqtt_features_in_use, #{}), - application:set_env( - emqx_telemetry, - advanced_mqtt_features_in_use, - #{ - delayed => false, - topic_rewrite => false, - retained => false, - auto_subscribe => false - } - ), + OldValues = emqx_modules:get_advanced_mqtt_features_in_use(), + emqx_modules:set_advanced_mqtt_features_in_use(#{ + delayed => false, + topic_rewrite => false, + retained => false, + auto_subscribe => false + }), [{old_values, OldValues} | Config]; init_per_testcase(_Testcase, Config) -> TestPID = self(), @@ -94,7 +90,7 @@ end_per_testcase(t_get_telemetry, _Config) -> ok; end_per_testcase(t_advanced_mqtt_features, Config) -> OldValues = ?config(old_values, Config), - application:set_env(emqx_telemetry, advanced_mqtt_features_in_use, OldValues); + emqx_modules:set_advanced_mqtt_features_in_use(OldValues); end_per_testcase(_Testcase, _Config) -> meck:unload([httpc]), ok. @@ -172,12 +168,8 @@ t_advanced_mqtt_features(_) -> ), lists:foreach( fun(TelemetryKey) -> - {ok, EnabledFeats} = application:get_env(emqx_telemetry, advanced_mqtt_features_in_use), - application:set_env( - emqx_telemetry, - advanced_mqtt_features_in_use, - EnabledFeats#{TelemetryKey => true} - ), + EnabledFeats = emqx_modules:get_advanced_mqtt_features_in_use(), + emqx_modules:set_advanced_mqtt_features_in_use(EnabledFeats#{TelemetryKey => true}), {ok, Data} = emqx_telemetry:get_telemetry(), #{TelemetryKey := Value} = get_value(advanced_mqtt_features, Data), ?assertEqual(1, Value, #{key => TelemetryKey})