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),
AutoSubscribeEnabled = length(emqx_conf:get([auto_subscribe, topics], [])) > 0,
application:set_env(
emqx_telemetry,
emqx_modules,
advanced_mqtt_features_in_use,
#{
delayed => DelayedEnabled,

View File

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

View File

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