From 0dcd24c86e7ee76b844b1897bb90f716d46401b1 Mon Sep 17 00:00:00 2001 From: SisMaker <1713699517@qq.com> Date: Mon, 17 May 2021 02:16:05 +0800 Subject: [PATCH] =?UTF-8?q?ft:=20=E6=89=93=E5=8D=B0=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BC=98=E5=8C=96;=20=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E6=97=B6=E5=90=8C=E6=AD=A5=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/eSync.erl | 3 +- src/sync/esSyncSrv.erl | 27 +++------ src/sync/esUtils.erl | 127 +++++++++++++++++------------------------ 3 files changed, 63 insertions(+), 94 deletions(-) diff --git a/src/eSync.erl b/src/eSync.erl index 123efa8..faa206d 100644 --- a/src/eSync.erl +++ b/src/eSync.erl @@ -29,8 +29,7 @@ run() -> esSyncSrv:unpause(), ok; {error, Reason} -> - Msg = io_lib:format("start eSync error:~p~n", [Reason]), - esUtils:logErrors(Msg) + esUtils:logErrors("start eSync error:~p~n", [Reason]) end. pause() -> diff --git a/src/sync/esSyncSrv.erl b/src/sync/esSyncSrv.erl index 2a4c4d7..6541b87 100644 --- a/src/sync/esSyncSrv.erl +++ b/src/sync/esSyncSrv.erl @@ -161,14 +161,11 @@ handleInfo({Port, {data, Data}}, Status, #state{srcFiles = Srcs, hrlFiles = Hrls true -> RetStr = os:cmd(CmdStr), RetList = string:split(RetStr, "\n", all), - CmdMsg = io_lib:format("compile cmd:~p ~n", [CmdStr]), - esUtils:logSuccess(CmdMsg), - RetMsg = io_lib:format("the result: ~n ", []), - esUtils:logSuccess(RetMsg), + esUtils:logSuccess("compile cmd:~p ~n", [CmdStr]), + esUtils:logSuccess("the result: ~n ", []), [ begin - OneMsg = io_lib:format("~p ~n", [OneRet]), - esUtils:logSuccess(OneMsg) + esUtils:logSuccess("~p ~n", [OneRet]) end || OneRet <- RetList, OneRet =/= [] ], ok; @@ -192,31 +189,25 @@ handleInfo({Port, {data, Data}}, Status, #state{srcFiles = Srcs, hrlFiles = Hrls {BSrcs, BHrls, BConfigs, BBeams} = esUtils:collSrcFiles(true), {nextS, running, State#state{srcFiles = BSrcs, hrlFiles = BHrls, configs = BConfigs, beams = BBeams}}; _ -> - ErrMsg = io_lib:format("error, esSyncSrv receive unexpect port msg ~p~n", [Data]), - esUtils:logErrors(ErrMsg), + esUtils:logErrors("error, esSyncSrv receive unexpect port msg ~p~n", [Data]), kpS_S end end; handleInfo({_Port, closed}, running, _State) -> - Msg = io_lib:format("esSyncSrv receive port closed ~n", []), - esUtils:logErrors(Msg), + esUtils:logErrors("esSyncSrv receive port closed ~n"), kpS_S; handleInfo({'EXIT', _Port, Reason}, running, _State) -> - Msg = io_lib:format("esSyncSrv receive port exit Reason:~p ~n", [Reason]), - esUtils:logErrors(Msg), + esUtils:logErrors("esSyncSrv receive port exit Reason:~p ~n", [Reason]), kpS_S; handleInfo({_Port, {exit_status, Status}}, running, _State) -> - Msg = io_lib:format("esSyncSrv receive port exit_status Status:~p ~n", [Status]), - esUtils:logErrors(Msg), + esUtils:logErrors("esSyncSrv receive port exit_status Status:~p ~n", [Status]), kpS_S; handleInfo(_Msg, _, _State) -> - Msg = io_lib:format("esSyncSrv receive unexpect msg:~p ~n", [_Msg]), - esUtils:logErrors(Msg), + esUtils:logErrors("esSyncSrv receive unexpect msg:~p ~n", [_Msg]), kpS_S. handleOnevent(sTimeout, waitConnOver, Status, State) -> - Msg = io_lib:format("failed to connect the fileSync to stop stauts:~p state:~p ~n", [Status, State]), - esUtils:logErrors(Msg), + esUtils:logErrors("failed to connect the fileSync to stop stauts:~p state:~p ~n", [Status, State]), stop; handleOnevent(_EventType, _EventContent, _Status, _State) -> kpS_S. diff --git a/src/sync/esUtils.erl b/src/sync/esUtils.erl index ebdf515..32794ab 100644 --- a/src/sync/esUtils.erl +++ b/src/sync/esUtils.erl @@ -61,8 +61,7 @@ getModOptions(Module) -> Options6 = addFileType(Module, Options5), {ok, Options6} catch ExType:Error -> - Msg = [io_lib:format("~p:0: ~p looking for options: ~p. ~n", [Module, ExType, Error])], - logWarnings(Msg), + logWarnings("~p:0: ~p looking for options: ~p. ~n", [Module, ExType, Error]), undefined end; _ -> @@ -115,8 +114,7 @@ tryGetSrcOptions(SrcDir) -> {ok, _Options} = Opts -> Opts; _ExType:_Error -> - Msg = [io_lib:format("looking src options error ~p:~p. ~n", [_ExType, _Error])], - logWarnings(Msg), + logWarnings("looking src options error ~p:~p. ~n", [_ExType, _Error]), undefined end; _ -> @@ -466,14 +464,20 @@ getEnv(Var, Default) -> setEnv(Var, Val) -> ok = application:set_env(eSync, Var, Val). -logSuccess(Message) -> - canLog(success) andalso error_logger:info_msg(lists:flatten(Message)). +logSuccess(Format) -> + canLog(success) andalso logger:notice(Format). +logSuccess(Format, Args) -> + canLog(success) andalso logger:notice(Format, Args). -logErrors(Message) -> - canLog(errors) andalso error_logger:error_msg(lists:flatten(Message)). +logErrors(Format) -> + canLog(errors) andalso logger:error(Format). +logErrors(Format, Args) -> + canLog(errors) andalso logger:error(Format, Args). -logWarnings(Message) -> - canLog(warnings) andalso error_logger:warning_msg(lists:flatten(Message)). +logWarnings(Format) -> + canLog(warnings) andalso logger:warning(Format) . +logWarnings(Format, Args) -> + canLog(warnings) andalso logger:warning(Format, Args) . canLog(MsgType) -> case esSyncSrv:getLog() of @@ -557,17 +561,14 @@ loadCfg() -> %% ******************************* 加载与编译相关 ********************************************************************** errorNoFile(Module) -> - Msg = io_lib:format("~p Couldn't load module: nofile", [Module]), - esUtils:logWarnings([Msg]). + esUtils:logWarnings(["~p Couldn't load module: nofile", [Module]]). printResults(_Module, SrcFile, [], []) -> - Msg = io_lib:format("~s Recompiled", [SrcFile]), - esUtils:logSuccess(lists:flatten(Msg)); + esUtils:logSuccess("~s Recompiled", [SrcFile]); printResults(_Module, SrcFile, [], Warnings) -> - formatErrors(fun esUtils:logWarnings/1, SrcFile, [], Warnings), - io_lib:format("~s Recompiled with ~p warnings", [SrcFile, length(Warnings)]); + formatErrors(fun esUtils:logWarnings/2, SrcFile, [], Warnings); printResults(_Module, SrcFile, Errors, Warnings) -> - formatErrors(fun esUtils:logErrors/1, SrcFile, Errors, Warnings). + formatErrors(fun esUtils:logErrors/2, SrcFile, Errors, Warnings). %% @private Print error messages in a pretty and user readable way. @@ -580,8 +581,7 @@ formatErrors(LogFun, File, Errors, Warnings) -> FPck = fun({Line, Prefix, Module, ErrorDescription}) -> Msg = formatError(Module, ErrorDescription), - LogMsg = io_lib:format("~s: ~p: ~s: ~s", [File, Line, Prefix, Msg]), - LogFun(LogMsg) + LogFun("~s: ~p: ~s: ~s", [File, Line, Prefix, Msg]) end, [FPck(X) || X <- Everything], ok. @@ -606,15 +606,13 @@ onSyncApply({M, F}, Modules) -> try erlang:apply(M, F, [Modules]) catch C:R:S -> - Msg = io_lib:format("apply sync fun ~p:~p(~p) error ~p", [M, F, Modules, {C, R, S}]), - esUtils:logErrors(Msg) + esUtils:logErrors("apply sync fun ~p:~p(~p) error ~p", [M, F, Modules, {C, R, S}]) end; onSyncApply(Fun, Modules) when is_function(Fun) -> try Fun(Modules) catch C:R:S -> - Msg = io_lib:format("apply sync fun ~p(~p) error ~p", [Fun, Modules, {C, R, S}]), - esUtils:logErrors(Msg) + esUtils:logErrors("apply sync fun ~p(~p) error ~p", [Fun, Modules, {C, R, S}]) end. reloadChangedMod([], _SwSyncNode, OnSyncFun, Acc) -> @@ -622,25 +620,15 @@ reloadChangedMod([], _SwSyncNode, OnSyncFun, Acc) -> reloadChangedMod([Module | LeftMod], SwSyncNode, OnSyncFun, Acc) -> case code:get_object_code(Module) of error -> - Msg = io_lib:format("Error loading object code for ~p", [Module]), - esUtils:logErrors(Msg), + esUtils:logErrors("Error loading object code for ~p", [Module]), reloadChangedMod(LeftMod, SwSyncNode, OnSyncFun, Acc); {Module, Binary, Filename} -> case code:load_binary(Module, Filename, Binary) of {module, Module} -> - Msg = io_lib:format("Reloaded(Beam changed) Mod: ~s Success", [Module]), - esUtils:logSuccess(Msg); + esUtils:logSuccess("Reloaded(Beam changed) Mod: ~s Success", [Module]), + syncLoadModOnAllNodes(SwSyncNode, Module, Binary, changed); {error, What} -> - Msg = io_lib:format("Reloaded(Beam changed) Mod: ~s Errors Reason:~p", [Module, What]), - esUtils:logErrors(Msg) - end, - case SwSyncNode of - true -> - {ok, NumNodes, Nodes} = syncLoadModOnAllNodes(Module), - MsgNodes = io_lib:format("Reloaded(Beam changed) Mod: ~s on ~p nodes:~p", [Module, NumNodes, Nodes]), - esUtils:logSuccess(MsgNodes); - false -> - ignore + esUtils:logErrors("Reloaded(Beam changed) Mod: ~s Errors Reason:~p", [Module, What]) end, reloadChangedMod(LeftMod, SwSyncNode, OnSyncFun, [Module | Acc]) end. @@ -648,15 +636,15 @@ reloadChangedMod([Module | LeftMod], SwSyncNode, OnSyncFun, Acc) -> getNodes() -> lists:usort(lists:flatten(nodes() ++ [rpc:call(X, erlang, nodes, []) || X <- nodes()])) -- [node()]. -syncLoadModOnAllNodes(Module) -> +syncLoadModOnAllNodes(false, _Module, _Binary, _Reason) -> + ignore; +syncLoadModOnAllNodes(true, Module, Binary, Reason) -> %% Get a list of nodes known by this node, plus all attached nodes. Nodes = getNodes(), NumNodes = length(Nodes), - {Module, Binary, _} = code:get_object_code(Module), - FSync = - fun(Node) -> - MsgNode = io_lib:format("Reloading '~s' on ~p", [Module, Node]), - esUtils:logSuccess(MsgNode), + [ + begin + esUtils:logSuccess("Do Reloading '~s' on ~p", [Module, Node]), rpc:call(Node, code, ensure_loaded, [Module]), case rpc:call(Node, code, which, [Module]) of Filename when is_binary(Filename) orelse is_list(Filename) -> @@ -666,26 +654,22 @@ syncLoadModOnAllNodes(Module) -> case rpc:call(Node, code, load_file, [Module]) of {module, Module} -> - Msg = io_lib:format("Reloaded(Beam changed) Mod:~s and write Success on node:~p", [Module, Node]), - esUtils:logSuccess(Msg); + esUtils:logSuccess("Reloaded(Beam ~p) Mod:~s and write Success on node:~p", [Reason, Module, Node]); {error, What} -> - Msg = io_lib:format("Reloaded(Beam changed) Mod:~s and write Errors on node:~p Reason:~p", [Module, Node, What]), - esUtils:logErrors(Msg) + esUtils:logErrors("Reloaded(Beam ~p) Mod:~s and write Errors on node:~p Reason:~p", [Module, Node, What]) end; _ -> %% File doesn't exist, just load into VM. case rpc:call(Node, code, load_binary, [Module, undefined, Binary]) of {module, Module} -> - Msg = io_lib:format("Reloaded(Beam changed) Mod:~s Success on node:~p", [Module, Node]), - esUtils:logSuccess(Msg); + esUtils:logSuccess("Reloaded(Beam ~p) Mod:~s Success on node:~p", [Reason, Module, Node]); {error, What} -> - Msg = io_lib:format("Reloaded(Beam changed) Mod:~s Errors on node:~p Reason:~p", [Module, Node, What]), - esUtils:logErrors(Msg) + esUtils:logErrors("Reloaded(Beam ~p) Mod:~s Errors on node:~p Reason:~p", [Reason, Module, Node, What]) end end - end, - [FSync(X) || X <- Nodes], - {ok, NumNodes, Nodes}. + end || Node <- Nodes + ], + esUtils:logSuccess("Reloaded(Beam changed) Mod: ~s on ~p nodes:~p", [Module, NumNodes, Nodes]). recompileChangeSrcFile(Iterator, SwSyncNode) -> case maps:next(Iterator) of @@ -741,7 +725,7 @@ getObjectCode(Module) -> _ -> {undefined, undefined} end. -reloadIfNecessary(Module, OldBinary, Binary, Filename) -> +reloadIfNecessary(Module, OldBinary, Binary, Filename, SwSyncNode) -> case Binary =/= OldBinary of true -> %% Try to load the module... @@ -749,20 +733,18 @@ reloadIfNecessary(Module, OldBinary, Binary, Filename) -> {module, Module} -> case code:load_binary(Module, Filename, Binary) of {module, Module} -> - Msg = io_lib:format("Reloaded(Beam changed) Mod:~s Success", [Module]), - esUtils:logSuccess(Msg); + esUtils:logSuccess("Reloaded(Beam recompiled) Mod:~s Success", [Module]), + syncLoadModOnAllNodes(SwSyncNode, Module, Binary, recompiled); {error, What} -> - Msg = io_lib:format("Reloaded(Beam changed) Mod:~s Errors Reason:~p", [Module, What]), - esUtils:logErrors(Msg) + esUtils:logErrors("Reloaded(Beam recompiled) Mod:~s Errors Reason:~p", [Module, What]) end; {error, nofile} -> case code:load_binary(Module, Filename, Binary) of {module, Module} -> - Msg = io_lib:format("Reloaded(Beam changed) Mod:~s Success", [Module]), - esUtils:logSuccess(Msg); + esUtils:logSuccess("Reloaded(Beam recompiled) Mod:~s Success", [Module]), + syncLoadModOnAllNodes(SwSyncNode, Module, Binary, recompiled); {error, What} -> - Msg = io_lib:format("Reloaded(Beam changed) Mod:~s Errors Reason:~p", [Module, What]), - esUtils:logErrors(Msg) + esUtils:logErrors("Reloaded(Beam recompiled) Mod:~s Errors Reason:~p", [Module, What]) end; {error, embedded} -> case code:load_file(Module) of %% Module is not yet loaded, load it. @@ -770,11 +752,10 @@ reloadIfNecessary(Module, OldBinary, Binary, Filename) -> {error, nofile} -> case code:load_binary(Module, Filename, Binary) of {module, Module} -> - Msg = io_lib:format("Reloaded(Beam changed) Mod:~s Success", [Module]), - esUtils:logSuccess(Msg); + esUtils:logSuccess("Reloaded(Beam recompiled) Mod:~s Success", [Module]), + syncLoadModOnAllNodes(SwSyncNode, Module, Binary, recompiled); {error, What} -> - Msg = io_lib:format("Reloaded(Beam changed) Mod:~s Errors Reason:~p", [Module, What]), - esUtils:logErrors(Msg) + esUtils:logErrors("Reloaded(Beam recompiled) Mod:~s Errors Reason:~p", [Module, What]) end end end; @@ -800,15 +781,15 @@ recompileSrcFile(SrcFile, SwSyncNode) -> case CompileFun(RightFileDir, [binary, return | Options]) of {ok, Module, Binary, Warnings} -> printResults(Module, RightFileDir, [], Warnings), - reloadIfNecessary(Module, OldBinary, Binary, Filename), + reloadIfNecessary(Module, OldBinary, Binary, Filename, SwSyncNode), {ok, [], Warnings}; {ok, [{ok, Module, Binary, Warnings}], Warnings2} -> printResults(Module, RightFileDir, [], Warnings ++ Warnings2), - reloadIfNecessary(Module, OldBinary, Binary, Filename), + reloadIfNecessary(Module, OldBinary, Binary, Filename, SwSyncNode), {ok, [], Warnings ++ Warnings2}; {ok, multiple, Results, Warnings} -> printResults(Module, RightFileDir, [], Warnings), - [reloadIfNecessary(CompiledModule, OldBinary, Binary, Filename) || {CompiledModule, Binary} <- Results], + [reloadIfNecessary(CompiledModule, OldBinary, Binary, Filename, SwSyncNode) || {CompiledModule, Binary} <- Results], {ok, [], Warnings}; {ok, OtherModule, _Binary, Warnings} -> Desc = io_lib:format("Module definition (~p) differs from expected (~s)", [OtherModule, filename:rootname(filename:basename(RightFileDir))]), @@ -819,8 +800,7 @@ recompileSrcFile(SrcFile, SwSyncNode) -> printResults(Module, RightFileDir, Errors, Warnings), {ok, Errors, Warnings}; _Err -> - Msg = io_lib:format("compile Mod:~s Errors Reason:~p", [Module, _Err]), - esUtils:logErrors(Msg) + esUtils:logErrors("compile Mod:~s Errors Reason:~p", [Module, _Err]) end; undefined -> case esUtils:tryGetModOptions(Module) of @@ -833,8 +813,7 @@ recompileSrcFile(SrcFile, SwSyncNode) -> setOptions(RootSrcDir, Options), recompileSrcFile(SrcFile, SwSyncNode); _ -> - Msg = io_lib:format("Unable to determine options for ~s", [SrcFile]), - esUtils:logErrors(Msg) + esUtils:logErrors("Unable to determine options for ~s", [SrcFile]) end end end.