| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- #!/usr/bin/env escript
- %% This script reads up emqx.conf and split the sections
- %% and dump sections to separate files.
- %% Sections are grouped between CONFIG_SECTION_BGN and
- %% CONFIG_SECTION_END pairs
- %%
- %% NOTE: this feature is so far not used in opensource
- %% edition due to backward-compatibility reasons.
- -mode(compile).
- -define(APPS, ["emqx", "emqx_dashboard", "emqx_authz"]).
- main(_) ->
- {ok, BaseConf} = file:read_file("apps/emqx_conf/etc/emqx_conf.conf"),
- Cfgs = get_all_cfgs("apps/"),
- Conf = [
- merge(BaseConf, Cfgs),
- io_lib:nl()
- ],
- ok = file:write_file("apps/emqx_conf/etc/emqx.conf.all", Conf),
- merge_desc_files().
- merge(BaseConf, Cfgs) ->
- Confs = [BaseConf | lists:map(fun read_conf/1, Cfgs)],
- infix(lists:filter(fun(I) -> iolist_size(I) > 0 end, Confs), [io_lib:nl()]).
- read_conf(CfgFile) ->
- case filelib:is_regular(CfgFile) of
- true ->
- {ok, Bin1} = file:read_file(CfgFile),
- string:trim(Bin1, both);
- false ->
- <<>>
- end.
- infix([], _With) -> [];
- infix([One], _With) -> [One];
- infix([H | T], With) -> [H, With, infix(T, With)].
- get_all_cfgs(Root) ->
- Apps0 = filelib:wildcard("*", Root) -- ["emqx_machine", "emqx_conf"],
- Apps1 = (Apps0 -- ?APPS) ++ lists:reverse(?APPS),
- Dirs = [filename:join([Root, App]) || App <- Apps1],
- lists:foldl(fun get_cfgs/2, [], Dirs).
- get_all_cfgs(Dir, Cfgs) ->
- Fun = fun(E, Acc) ->
- Path = filename:join([Dir, E]),
- get_cfgs(Path, Acc)
- end,
- lists:foldl(Fun, Cfgs, filelib:wildcard("*", Dir)).
- get_cfgs(Dir, Cfgs) ->
- case filelib:is_dir(Dir) of
- false ->
- Cfgs;
- _ ->
- Files = filelib:wildcard("*", Dir),
- case lists:member("etc", Files) of
- false ->
- try_enter_child(Dir, Files, Cfgs);
- true ->
- EtcDir = filename:join([Dir, "etc"]),
- %% the conf name must start with emqx
- %% because there are some other conf, and these conf don't start with emqx
- Confs = filelib:wildcard("emqx*.conf", EtcDir),
- NewCfgs = [filename:join([EtcDir, Name]) || Name <- Confs],
- try_enter_child(Dir, Files, NewCfgs ++ Cfgs)
- end
- end.
- try_enter_child(Dir, Files, Cfgs) ->
- case lists:member("src", Files) of
- false ->
- Cfgs;
- true ->
- get_all_cfgs(filename:join([Dir, "src"]), Cfgs)
- end.
- %% Merge English descriptions.
- %% other translations are downloaded in pre-compile.sh
- merge_desc_files() ->
- BaseConf = <<"">>,
- Cfgs0 = get_all_desc_files(),
- Conf = do_merge_desc_files(BaseConf, Cfgs0),
- OutputFile = "apps/emqx_dashboard/priv/desc.en.hocon",
- ok = filelib:ensure_dir(OutputFile),
- ok = file:write_file(OutputFile, Conf).
- do_merge_desc_files(BaseConf, Cfgs) ->
- lists:foldl(
- fun(CfgFile, Acc) ->
- case filelib:is_regular(CfgFile) of
- true ->
- {ok, Bin1} = file:read_file(CfgFile),
- [Acc, io_lib:nl(), Bin1];
- false -> Acc
- end
- end, BaseConf, Cfgs).
- get_all_desc_files() ->
- Dir = filename:join(["rel", "i18n"]),
- Files = filelib:wildcard("*.hocon", Dir),
- lists:map(fun(Name) -> filename:join([Dir, Name]) end, Files).
|