fix: set own app environment and expose convenient api

... for accessing advanced mqtt features in use.
This commit is contained in:
Thales Macedo Garitezi 2022-03-25 09:44:35 -03:00
parent d312bc0f28
commit 105ec5104a
No known key found for this signature in database
GPG Key ID: DD279F8152A9B6DD
4 changed files with 49 additions and 20 deletions

View File

@ -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).

View File

@ -38,7 +38,7 @@ maybe_enable_modules() ->
RetainerEnabled = emqx_conf:get([retainer, enable], false), RetainerEnabled = emqx_conf:get([retainer, enable], false),
AutoSubscribeEnabled = length(emqx_conf:get([auto_subscribe, topics], [])) > 0, AutoSubscribeEnabled = length(emqx_conf:get([auto_subscribe, topics], [])) > 0,
application:set_env( application:set_env(
emqx_telemetry, emqx_modules,
advanced_mqtt_features_in_use, advanced_mqtt_features_in_use,
#{ #{
delayed => DelayedEnabled, delayed => DelayedEnabled,

View File

@ -449,7 +449,7 @@ update_mqtt_rates(State) ->
{#{}, State}. {#{}, State}.
advanced_mqtt_features() -> 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). maps:map(fun(_K, V) -> bool2int(V) end, AdvancedFeatures).
bin(L) when is_list(L) -> bin(L) when is_list(L) ->

View File

@ -67,17 +67,13 @@ init_per_testcase(t_get_telemetry, Config) ->
), ),
Config; Config;
init_per_testcase(t_advanced_mqtt_features, Config) -> init_per_testcase(t_advanced_mqtt_features, Config) ->
OldValues = application:get_env(emqx_telemetry, advanced_mqtt_features_in_use, #{}), OldValues = emqx_modules:get_advanced_mqtt_features_in_use(),
application:set_env( emqx_modules:set_advanced_mqtt_features_in_use(#{
emqx_telemetry,
advanced_mqtt_features_in_use,
#{
delayed => false, delayed => false,
topic_rewrite => false, topic_rewrite => false,
retained => false, retained => false,
auto_subscribe => false auto_subscribe => false
} }),
),
[{old_values, OldValues} | Config]; [{old_values, OldValues} | Config];
init_per_testcase(_Testcase, Config) -> init_per_testcase(_Testcase, Config) ->
TestPID = self(), TestPID = self(),
@ -94,7 +90,7 @@ end_per_testcase(t_get_telemetry, _Config) ->
ok; ok;
end_per_testcase(t_advanced_mqtt_features, Config) -> end_per_testcase(t_advanced_mqtt_features, Config) ->
OldValues = ?config(old_values, 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) -> end_per_testcase(_Testcase, _Config) ->
meck:unload([httpc]), meck:unload([httpc]),
ok. ok.
@ -172,12 +168,8 @@ t_advanced_mqtt_features(_) ->
), ),
lists:foreach( lists:foreach(
fun(TelemetryKey) -> fun(TelemetryKey) ->
{ok, EnabledFeats} = application:get_env(emqx_telemetry, advanced_mqtt_features_in_use), EnabledFeats = emqx_modules:get_advanced_mqtt_features_in_use(),
application:set_env( emqx_modules:set_advanced_mqtt_features_in_use(EnabledFeats#{TelemetryKey => true}),
emqx_telemetry,
advanced_mqtt_features_in_use,
EnabledFeats#{TelemetryKey => true}
),
{ok, Data} = emqx_telemetry:get_telemetry(), {ok, Data} = emqx_telemetry:get_telemetry(),
#{TelemetryKey := Value} = get_value(advanced_mqtt_features, Data), #{TelemetryKey := Value} = get_value(advanced_mqtt_features, Data),
?assertEqual(1, Value, #{key => TelemetryKey}) ?assertEqual(1, Value, #{key => TelemetryKey})