diff --git a/apps/emqx/src/emqx_config_handler.erl b/apps/emqx/src/emqx_config_handler.erl index 20aa0b5f8..9b655c327 100644 --- a/apps/emqx/src/emqx_config_handler.erl +++ b/apps/emqx/src/emqx_config_handler.erl @@ -81,7 +81,7 @@ get_raw_config() -> init(_) -> {ok, RawConf} = hocon:load(emqx_conf_name(), #{format => richmap}), {_MappedEnvs, Conf} = hocon_schema:map_translate(emqx_schema, RawConf, #{}), - ok = save_config_to_emqx_config(Conf), + ok = save_config_to_emqx_config(hocon_schema:richmap_to_map(Conf)), {ok, #{raw_config => hocon_schema:richmap_to_map(RawConf), handlers => #{?MOD => ?MODULE}}}. diff --git a/apps/emqx/src/emqx_schema.erl b/apps/emqx/src/emqx_schema.erl index d090f26f1..4570528c2 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -484,7 +484,7 @@ fields("telemetry") -> ]; fields(ExtraField) -> - Mod = list_to_atom(ExtraField), + Mod = list_to_atom(ExtraField++"_schema"), Mod:fields(ExtraField). translations() -> ["ekka", "vm_args", "gen_rpc", "kernel", "emqx"]. diff --git a/apps/emqx_data_bridge/src/emqx_data_bridge.erl b/apps/emqx_data_bridge/src/emqx_data_bridge.erl index fe2900b7f..ccd6a0074 100644 --- a/apps/emqx_data_bridge/src/emqx_data_bridge.erl +++ b/apps/emqx_data_bridge/src/emqx_data_bridge.erl @@ -26,39 +26,7 @@ , update_config/1 ]). --export([structs/0, fields/1]). - -%%====================================================================================== -%% Hocon Schema Definitions - --define(BRIDGE_FIELDS(T), - [{name, hoconsc:t(typerefl:binary())}, - {type, hoconsc:t(typerefl:atom(T))}, - {config, hoconsc:t(hoconsc:ref(list_to_atom("emqx_connector_"++atom_to_list(T)), ""))}]). - --define(TYPES, [mysql, pgsql, mongo, redis, ldap]). --define(BRIDGES, [hoconsc:ref(?MODULE, T) || T <- ?TYPES]). - -structs() -> ["emqx_data_bridge"]. - -fields("emqx_data_bridge") -> - [{bridges, #{type => hoconsc:array(hoconsc:union(?BRIDGES)), - default => []}}]; - -fields(mysql) -> ?BRIDGE_FIELDS(mysql); -fields(pgsql) -> ?BRIDGE_FIELDS(pgsql); -fields(mongo) -> ?BRIDGE_FIELDS(mongo); -fields(redis) -> ?BRIDGE_FIELDS(redis); -fields(ldap) -> ?BRIDGE_FIELDS(ldap). - -%%====================================================================================== - load_bridges() -> - % ConfFile = filename:join([emqx:get_env(plugins_etc_dir), ?MODULE]) ++ ".conf", - % {ok, RawConfig} = hocon:load(ConfFile, #{format => richmap}), - % #{emqx_data_bridge := #{bridges := Bridges}} = - % hocon_schema:check(emqx_data_bridge_schema, RawConfig, - % #{atom_key => true, return_plain => true}), Bridges = emqx_config:get([emqx_data_bridge, bridges], []), emqx_data_bridge_monitor:ensure_all_started(Bridges). diff --git a/apps/emqx_data_bridge/src/emqx_data_bridge_schema.erl b/apps/emqx_data_bridge/src/emqx_data_bridge_schema.erl new file mode 100644 index 000000000..1ba7f2fc5 --- /dev/null +++ b/apps/emqx_data_bridge/src/emqx_data_bridge_schema.erl @@ -0,0 +1,26 @@ +-module(emqx_data_bridge_schema). + +-export([structs/0, fields/1]). + +%%====================================================================================== +%% Hocon Schema Definitions + +-define(BRIDGE_FIELDS(T), + [{name, hoconsc:t(typerefl:binary())}, + {type, hoconsc:t(typerefl:atom(T))}, + {config, hoconsc:t(hoconsc:ref(list_to_atom("emqx_connector_"++atom_to_list(T)), ""))}]). + +-define(TYPES, [mysql, pgsql, mongo, redis, ldap]). +-define(BRIDGES, [hoconsc:ref(?MODULE, T) || T <- ?TYPES]). + +structs() -> ["emqx_data_bridge"]. + +fields("emqx_data_bridge") -> + [{bridges, #{type => hoconsc:array(hoconsc:union(?BRIDGES)), + default => []}}]; + +fields(mysql) -> ?BRIDGE_FIELDS(mysql); +fields(pgsql) -> ?BRIDGE_FIELDS(pgsql); +fields(mongo) -> ?BRIDGE_FIELDS(mongo); +fields(redis) -> ?BRIDGE_FIELDS(redis); +fields(ldap) -> ?BRIDGE_FIELDS(ldap). \ No newline at end of file diff --git a/apps/emqx_telemetry/src/emqx_telemetry.erl b/apps/emqx_telemetry/src/emqx_telemetry.erl index dba22e85b..ea4017dc9 100644 --- a/apps/emqx_telemetry/src/emqx_telemetry.erl +++ b/apps/emqx_telemetry/src/emqx_telemetry.erl @@ -16,10 +16,6 @@ -module(emqx_telemetry). --include_lib("typerefl/include/types.hrl"). - --behaviour(hocon_schema). - -behaviour(gen_server). -include_lib("emqx/include/emqx.hrl"). @@ -40,9 +36,6 @@ , stop/0 ]). --export([ structs/0 - , fields/1]). - %% gen_server callbacks -export([ init/1 , handle_call/3 @@ -97,12 +90,6 @@ -define(TELEMETRY, emqx_telemetry). -%%-------------------------------------------------------------------- -structs() -> ["emqx_telemetry"]. - -fields("emqx_telemetry") -> - [{enabled, emqx_schema:t(boolean(), undefined, false)}]. - %%-------------------------------------------------------------------- %% Mnesia bootstrap %%-------------------------------------------------------------------- diff --git a/apps/emqx_telemetry/src/emqx_telemetry_schema.erl b/apps/emqx_telemetry/src/emqx_telemetry_schema.erl new file mode 100644 index 000000000..4d5cab684 --- /dev/null +++ b/apps/emqx_telemetry/src/emqx_telemetry_schema.erl @@ -0,0 +1,13 @@ +-module(emqx_telemetry_schema). + +-include_lib("typerefl/include/types.hrl"). + +-behaviour(hocon_schema). + +-export([ structs/0 + , fields/1]). + +structs() -> ["emqx_telemetry"]. + +fields("emqx_telemetry") -> + [{enabled, emqx_schema:t(boolean(), undefined, false)}]. \ No newline at end of file