diff --git a/src/emqx.erl b/src/emqx.erl index 79356d38b..097b4b6c5 100644 --- a/src/emqx.erl +++ b/src/emqx.erl @@ -29,16 +29,18 @@ , stop/0 ]). +-export([ get_env/1 + , get_env/2 + ]). + %% PubSub API -export([ subscribe/1 , subscribe/2 , subscribe/3 + , publish/1 + , unsubscribe/1 ]). --export([publish/1]). - --export([unsubscribe/1]). - %% PubSub management API -export([ topics/0 , subscriptions/1 @@ -101,6 +103,15 @@ is_running(Node) -> Pid when is_pid(Pid) -> true end. +%% @doc Get environment +-spec(get_env(Key :: atom()) -> maybe(term())). +get_env(Key) -> + get_env(Key, undefined). + +-spec(get_env(Key :: atom(), Default :: term()) -> term()). +get_env(Key, Default) -> + application:get_env(?APP, Key, Default). + %%-------------------------------------------------------------------- %% PubSub API %%-------------------------------------------------------------------- diff --git a/src/emqx_broker.erl b/src/emqx_broker.erl index 359e65ab8..f171d3e98 100644 --- a/src/emqx_broker.erl +++ b/src/emqx_broker.erl @@ -236,7 +236,7 @@ route(Routes, Delivery) -> do_route({To, Node}, Delivery) when Node =:= node() -> {Node, To, dispatch(To, Delivery)}; do_route({To, Node}, Delivery) when is_atom(Node) -> - {Node, To, forward(Node, To, Delivery, emqx_config:get_env(rpc_mode, async))}; + {Node, To, forward(Node, To, Delivery, emqx:get_env(rpc_mode, async))}; do_route({To, Group}, Delivery) when is_tuple(Group); is_binary(Group) -> {share, To, emqx_shared_sub:dispatch(Group, To, Delivery)}. diff --git a/src/emqx_cm_locker.erl b/src/emqx_cm_locker.erl index c5cd9c2f6..874863b63 100644 --- a/src/emqx_cm_locker.erl +++ b/src/emqx_cm_locker.erl @@ -62,5 +62,5 @@ unlock(ClientId) -> -spec(strategy() -> local | one | quorum | all). strategy() -> - emqx_config:get_env(session_locking_strategy, quorum). + emqx:get_env(session_locking_strategy, quorum). diff --git a/src/emqx_cm_registry.erl b/src/emqx_cm_registry.erl index ce843a427..04dd04e80 100644 --- a/src/emqx_cm_registry.erl +++ b/src/emqx_cm_registry.erl @@ -62,7 +62,7 @@ start_link() -> %% @doc Is the global registry enabled? -spec(is_enabled() -> boolean()). is_enabled() -> - emqx_config:get_env(enable_channel_registry, true). + emqx:get_env(enable_channel_registry, true). %% @doc Register a global channel. -spec(register_channel(emqx_types:client_id() diff --git a/src/emqx_config.erl b/src/emqx_config.erl deleted file mode 100644 index bef0302f6..000000000 --- a/src/emqx_config.erl +++ /dev/null @@ -1,32 +0,0 @@ -%%-------------------------------------------------------------------- -%% Copyright (c) 2019 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_config). - --export([ get_env/1 - , get_env/2 - ]). - --define(APP, emqx). - -%% @doc Get environment --spec(get_env(Key :: atom()) -> term() | undefined). -get_env(Key) -> - get_env(Key, undefined). - --spec(get_env(Key :: atom(), Default :: term()) -> term()). -get_env(Key, Default) -> - application:get_env(?APP, Key, Default). diff --git a/src/emqx_flapping.erl b/src/emqx_flapping.erl index ba3f444b7..0a9a62d56 100644 --- a/src/emqx_flapping.erl +++ b/src/emqx_flapping.erl @@ -105,7 +105,7 @@ start_link() -> gen_statem:start_link({local, ?MODULE}, ?MODULE, [], []). init([]) -> - Interval = emqx_config:get_env(flapping_clean_interval, ?default_flapping_clean_interval), + Interval = emqx:get_env(flapping_clean_interval, ?default_flapping_clean_interval), TabOpts = [ public , set , {keypos, 2} diff --git a/src/emqx_listeners.erl b/src/emqx_listeners.erl index 802179065..036b60e10 100644 --- a/src/emqx_listeners.erl +++ b/src/emqx_listeners.erl @@ -42,7 +42,7 @@ %% @doc Start all listeners. -spec(start() -> ok). start() -> - lists:foreach(fun start_listener/1, emqx_config:get_env(listeners, [])). + lists:foreach(fun start_listener/1, emqx:get_env(listeners, [])). -spec(start_listener(listener()) -> {ok, pid()} | {error, term()}). start_listener({Proto, ListenOn, Options}) -> @@ -113,7 +113,7 @@ with_port({Addr, Port}, Opts = #{socket_opts := SocketOption}) -> %% @doc Restart all listeners -spec(restart() -> ok). restart() -> - lists:foreach(fun restart_listener/1, emqx_config:get_env(listeners, [])). + lists:foreach(fun restart_listener/1, emqx:get_env(listeners, [])). -spec(restart_listener(listener()) -> any()). restart_listener({Proto, ListenOn, Options}) -> @@ -136,7 +136,7 @@ restart_listener(Proto, ListenOn, _Opts) -> %% @doc Stop all listeners. -spec(stop() -> ok). stop() -> - lists:foreach(fun stop_listener/1, emqx_config:get_env(listeners, [])). + lists:foreach(fun stop_listener/1, emqx:get_env(listeners, [])). -spec(stop_listener(listener()) -> ok | {error, term()}). stop_listener({Proto, ListenOn, Opts}) -> diff --git a/src/emqx_mod_acl_internal.erl b/src/emqx_mod_acl_internal.erl index 2629ed60a..36e4f67ff 100644 --- a/src/emqx_mod_acl_internal.erl +++ b/src/emqx_mod_acl_internal.erl @@ -79,8 +79,7 @@ reload_acl() -> %% Internal Functions %%-------------------------------------------------------------------- -acl_file() -> - emqx_config:get_env(acl_file). +acl_file() -> emqx:get_env(acl_file). lookup(PubSub, Rules) -> maps:get(PubSub, Rules, []). diff --git a/src/emqx_modules.erl b/src/emqx_modules.erl index c96cd6c15..6ba69e1fd 100644 --- a/src/emqx_modules.erl +++ b/src/emqx_modules.erl @@ -34,8 +34,7 @@ load({Mod, Env}) -> ok = Mod:load(Env), ?LOG(info, "Load ~s module successfully.", [Mod]). -modules() -> - emqx_config:get_env(modules, []). +modules() -> emqx:get_env(modules, []). %% @doc Unload all the extended modules. -spec(unload() -> ok). diff --git a/src/emqx_plugins.erl b/src/emqx_plugins.erl index e75a70e83..4a597fda6 100644 --- a/src/emqx_plugins.erl +++ b/src/emqx_plugins.erl @@ -39,7 +39,7 @@ %% @doc Init plugins' config -spec(init() -> ok). init() -> - case emqx_config:get_env(plugins_etc_dir) of + case emqx:get_env(plugins_etc_dir) of undefined -> ok; PluginsEtc -> CfgFiles = [filename:join(PluginsEtc, File) || @@ -57,16 +57,15 @@ init_config(CfgFile) -> -spec(load() -> list() | {error, term()}). load() -> load_expand_plugins(), - case emqx_config:get_env(plugins_loaded_file) of - undefined -> %% No plugins available - ignore; + case emqx:get_env(plugins_loaded_file) of + undefined -> ignore; %% No plugins available File -> ensure_file(File), with_loaded_file(File, fun(Names) -> load_plugins(Names, false) end) end. load_expand_plugins() -> - case emqx_config:get_env(expand_plugins_dir) of + case emqx:get_env(expand_plugins_dir) of undefined -> ok; ExpandPluginsDir -> Plugins = filelib:wildcard("*", ExpandPluginsDir), @@ -138,9 +137,8 @@ load_plugins(Names, Persistent) -> %% @doc Unload all plugins before broker stopped. -spec(unload() -> list() | {error, term()}). unload() -> - case emqx_config:get_env(plugins_loaded_file) of - undefined -> - ignore; + case emqx:get_env(plugins_loaded_file) of + undefined -> ignore; File -> with_loaded_file(File, fun stop_plugins/1) end. @@ -300,7 +298,7 @@ plugin_unloaded(Name, true) -> end. read_loaded() -> - case emqx_config:get_env(plugins_loaded_file) of + case emqx:get_env(plugins_loaded_file) of undefined -> {error, not_found}; File -> read_loaded(File) end. @@ -308,7 +306,7 @@ read_loaded() -> read_loaded(File) -> file:consult(File). write_loaded(AppNames) -> - FilePath = emqx_config:get_env(plugins_loaded_file), + FilePath = emqx:get_env(plugins_loaded_file), case file:write_file(FilePath, [io_lib:format("~p.~n", [Name]) || Name <- AppNames]) of ok -> ok; {error, Error} -> diff --git a/src/emqx_shared_sub.erl b/src/emqx_shared_sub.erl index 66be8ee81..71a20b20c 100644 --- a/src/emqx_shared_sub.erl +++ b/src/emqx_shared_sub.erl @@ -127,11 +127,11 @@ dispatch(Group, Topic, Delivery = #delivery{message = Msg}, FailedSubs) -> -spec(strategy() -> random | round_robin | sticky | hash). strategy() -> - emqx_config:get_env(shared_subscription_strategy, round_robin). + emqx:get_env(shared_subscription_strategy, round_robin). -spec(ack_enabled() -> boolean()). ack_enabled() -> - emqx_config:get_env(shared_dispatch_ack_enabled, false). + emqx:get_env(shared_dispatch_ack_enabled, false). do_dispatch(SubPid, Topic, Msg, _Type) when SubPid =:= self() -> %% Deadlock otherwise diff --git a/src/emqx_sys.erl b/src/emqx_sys.erl index 41b27729b..66c3d2dc1 100644 --- a/src/emqx_sys.erl +++ b/src/emqx_sys.erl @@ -111,12 +111,12 @@ datetime() -> %% @doc Get sys interval -spec(sys_interval() -> pos_integer()). sys_interval() -> - emqx_config:get_env(broker_sys_interval, 60000). + emqx:get_env(broker_sys_interval, 60000). %% @doc Get sys heatbeat interval -spec(sys_heatbeat_interval() -> pos_integer()). sys_heatbeat_interval() -> - emqx_config:get_env(broker_sys_heartbeat, 30000). + emqx:get_env(broker_sys_heartbeat, 30000). %% @doc Get sys info -spec(info() -> list(tuple())). diff --git a/src/emqx_sys_sup.erl b/src/emqx_sys_sup.erl index cbc07650e..7a94c4288 100644 --- a/src/emqx_sys_sup.erl +++ b/src/emqx_sys_sup.erl @@ -48,6 +48,5 @@ child_spec(Mod, Args) -> modules => [Mod] }. -config(Name) -> - emqx_config:get_env(Name, []). +config(Name) -> emqx:get_env(Name, []). diff --git a/src/emqx_zone.erl b/src/emqx_zone.erl index bac32b849..7a93037b1 100644 --- a/src/emqx_zone.erl +++ b/src/emqx_zone.erl @@ -66,18 +66,17 @@ start_link() -> gen_server:start_link({local, ?SERVER}, ?MODULE, [], []). -spec(get_env(maybe(zone()), atom()) -> maybe(term())). -get_env(undefined, Key) -> - emqx_config:get_env(Key); +get_env(undefined, Key) -> emqx:get_env(Key); get_env(Zone, Key) -> get_env(Zone, Key, undefined). -spec(get_env(maybe(zone()), atom(), term()) -> maybe(term())). get_env(undefined, Key, Def) -> - emqx_config:get_env(Key, Def); + emqx:get_env(Key, Def); get_env(Zone, Key, Def) -> try persistent_term:get(?KEY(Zone, Key)) catch error:badarg -> - emqx_config:get_env(Key, Def) + emqx:get_env(Key, Def) end. -spec(set_env(zone(), atom(), term()) -> ok). @@ -132,5 +131,5 @@ code_change(_OldVsn, State, _Extra) -> do_reload() -> [persistent_term:put(?KEY(Zone, Key), Val) - || {Zone, Opts} <- emqx_config:get_env(zones, []), {Key, Val} <- Opts]. + || {Zone, Opts} <- emqx:get_env(zones, []), {Key, Val} <- Opts]. diff --git a/test/emqx_SUITE.erl b/test/emqx_SUITE.erl index c26028c76..96c76b3e6 100644 --- a/test/emqx_SUITE.erl +++ b/test/emqx_SUITE.erl @@ -32,6 +32,14 @@ init_per_suite(Config) -> end_per_suite(_Config) -> emqx_ct_helpers:stop_apps([]). +t_get_env(_) -> + ?assertEqual(undefined, emqx:get_env(undefined_key)), + ?assertEqual(default_value, emqx:get_env(undefined_key, default_value)), + application:set_env(emqx, undefined_key, hello), + ?assertEqual(hello, emqx:get_env(undefined_key)), + ?assertEqual(hello, emqx:get_env(undefined_key, default_value)), + application:unset_env(emqx, undefined_key). + t_emqx_pubsub_api(_) -> emqx:start(), true = emqx:is_running(node()), diff --git a/test/emqx_config_SUITE.erl b/test/emqx_config_SUITE.erl deleted file mode 100644 index 5014e3ef3..000000000 --- a/test/emqx_config_SUITE.erl +++ /dev/null @@ -1,39 +0,0 @@ -%%-------------------------------------------------------------------- -%% Copyright (c) 2019 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_config_SUITE). - --compile(export_all). --compile(nowarn_export_all). - --include_lib("eunit/include/eunit.hrl"). - -all() -> emqx_ct:all(?MODULE). - -init_per_suite(Config) -> - emqx_ct_helpers:start_apps([]), - Config. - -end_per_suite(_Config) -> - emqx_ct_helpers:stop_apps([]). - -t_get_env(_) -> - ?assertEqual(undefined, emqx_config:get_env(undefined_key)), - ?assertEqual(default_value, emqx_config:get_env(undefined_key, default_value)), - application:set_env(emqx, undefined_key, hello), - ?assertEqual(hello, emqx_config:get_env(undefined_key)), - ?assertEqual(hello, emqx_config:get_env(undefined_key, default_value)), - application:unset_env(emqx, undefined_key). \ No newline at end of file