Browse Source

ft: 打印日志相关优化; 编译加载时同步节点加载

master
SisMaker 4 years ago
parent
commit
0dcd24c86e
3 changed files with 63 additions and 94 deletions
  1. +1
    -2
      src/eSync.erl
  2. +9
    -18
      src/sync/esSyncSrv.erl
  3. +53
    -74
      src/sync/esUtils.erl

+ 1
- 2
src/eSync.erl View File

@ -29,8 +29,7 @@ run() ->
esSyncSrv:unpause(), esSyncSrv:unpause(),
ok; ok;
{error, Reason} -> {error, Reason} ->
Msg = io_lib:format("start eSync error:~p~n", [Reason]),
esUtils:logErrors(Msg)
esUtils:logErrors("start eSync error:~p~n", [Reason])
end. end.
pause() -> pause() ->

+ 9
- 18
src/sync/esSyncSrv.erl View File

@ -161,14 +161,11 @@ handleInfo({Port, {data, Data}}, Status, #state{srcFiles = Srcs, hrlFiles = Hrls
true -> true ->
RetStr = os:cmd(CmdStr), RetStr = os:cmd(CmdStr),
RetList = string:split(RetStr, "\n", all), 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 begin
OneMsg = io_lib:format("~p ~n", [OneRet]),
esUtils:logSuccess(OneMsg)
esUtils:logSuccess("~p ~n", [OneRet])
end || OneRet <- RetList, OneRet =/= [] end || OneRet <- RetList, OneRet =/= []
], ],
ok; ok;
@ -192,31 +189,25 @@ handleInfo({Port, {data, Data}}, Status, #state{srcFiles = Srcs, hrlFiles = Hrls
{BSrcs, BHrls, BConfigs, BBeams} = esUtils:collSrcFiles(true), {BSrcs, BHrls, BConfigs, BBeams} = esUtils:collSrcFiles(true),
{nextS, running, State#state{srcFiles = BSrcs, hrlFiles = BHrls, configs = BConfigs, beams = BBeams}}; {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 kpS_S
end end
end; end;
handleInfo({_Port, closed}, running, _State) -> 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; kpS_S;
handleInfo({'EXIT', _Port, Reason}, running, _State) -> 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; kpS_S;
handleInfo({_Port, {exit_status, Status}}, running, _State) -> 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; kpS_S;
handleInfo(_Msg, _, _State) -> 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. kpS_S.
handleOnevent(sTimeout, waitConnOver, Status, State) -> 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; stop;
handleOnevent(_EventType, _EventContent, _Status, _State) -> handleOnevent(_EventType, _EventContent, _Status, _State) ->
kpS_S. kpS_S.

+ 53
- 74
src/sync/esUtils.erl View File

@ -61,8 +61,7 @@ getModOptions(Module) ->
Options6 = addFileType(Module, Options5), Options6 = addFileType(Module, Options5),
{ok, Options6} {ok, Options6}
catch ExType:Error -> 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 undefined
end; end;
_ -> _ ->
@ -115,8 +114,7 @@ tryGetSrcOptions(SrcDir) ->
{ok, _Options} = Opts -> {ok, _Options} = Opts ->
Opts; Opts;
_ExType:_Error -> _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 undefined
end; end;
_ -> _ ->
@ -466,14 +464,20 @@ getEnv(Var, Default) ->
setEnv(Var, Val) -> setEnv(Var, Val) ->
ok = application:set_env(eSync, 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) -> canLog(MsgType) ->
case esSyncSrv:getLog() of case esSyncSrv:getLog() of
@ -557,17 +561,14 @@ loadCfg() ->
%% ******************************* ********************************************************************** %% ******************************* **********************************************************************
errorNoFile(Module) -> 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, [], []) -> printResults(_Module, SrcFile, [], []) ->
Msg = io_lib:format("~s Recompiled", [SrcFile]),
esUtils:logSuccess(lists:flatten(Msg));
esUtils:logSuccess("~s Recompiled", [SrcFile]);
printResults(_Module, SrcFile, [], Warnings) -> 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) -> 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. %% @private Print error messages in a pretty and user readable way.
@ -580,8 +581,7 @@ formatErrors(LogFun, File, Errors, Warnings) ->
FPck = FPck =
fun({Line, Prefix, Module, ErrorDescription}) -> fun({Line, Prefix, Module, ErrorDescription}) ->
Msg = formatError(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, end,
[FPck(X) || X <- Everything], [FPck(X) || X <- Everything],
ok. ok.
@ -606,15 +606,13 @@ onSyncApply({M, F}, Modules) ->
try erlang:apply(M, F, [Modules]) try erlang:apply(M, F, [Modules])
catch catch
C:R:S -> 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; end;
onSyncApply(Fun, Modules) when is_function(Fun) -> onSyncApply(Fun, Modules) when is_function(Fun) ->
try Fun(Modules) try Fun(Modules)
catch catch
C:R:S -> 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. end.
reloadChangedMod([], _SwSyncNode, OnSyncFun, Acc) -> reloadChangedMod([], _SwSyncNode, OnSyncFun, Acc) ->
@ -622,25 +620,15 @@ reloadChangedMod([], _SwSyncNode, OnSyncFun, Acc) ->
reloadChangedMod([Module | LeftMod], SwSyncNode, OnSyncFun, Acc) -> reloadChangedMod([Module | LeftMod], SwSyncNode, OnSyncFun, Acc) ->
case code:get_object_code(Module) of case code:get_object_code(Module) of
error -> 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); reloadChangedMod(LeftMod, SwSyncNode, OnSyncFun, Acc);
{Module, Binary, Filename} -> {Module, Binary, Filename} ->
case code:load_binary(Module, Filename, Binary) of case code:load_binary(Module, Filename, Binary) of
{module, Module} -> {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} -> {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, end,
reloadChangedMod(LeftMod, SwSyncNode, OnSyncFun, [Module | Acc]) reloadChangedMod(LeftMod, SwSyncNode, OnSyncFun, [Module | Acc])
end. end.
@ -648,15 +636,15 @@ reloadChangedMod([Module | LeftMod], SwSyncNode, OnSyncFun, Acc) ->
getNodes() -> getNodes() ->
lists:usort(lists:flatten(nodes() ++ [rpc:call(X, erlang, nodes, []) || X <- nodes()])) -- [node()]. 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. %% Get a list of nodes known by this node, plus all attached nodes.
Nodes = getNodes(), Nodes = getNodes(),
NumNodes = length(Nodes), 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]), rpc:call(Node, code, ensure_loaded, [Module]),
case rpc:call(Node, code, which, [Module]) of case rpc:call(Node, code, which, [Module]) of
Filename when is_binary(Filename) orelse is_list(Filename) -> Filename when is_binary(Filename) orelse is_list(Filename) ->
@ -666,26 +654,22 @@ syncLoadModOnAllNodes(Module) ->
case rpc:call(Node, code, load_file, [Module]) of case rpc:call(Node, code, load_file, [Module]) of
{module, Module} -> {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} -> {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; end;
_ -> _ ->
%% File doesn't exist, just load into VM. %% File doesn't exist, just load into VM.
case rpc:call(Node, code, load_binary, [Module, undefined, Binary]) of case rpc:call(Node, code, load_binary, [Module, undefined, Binary]) of
{module, Module} -> {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} -> {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 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) -> recompileChangeSrcFile(Iterator, SwSyncNode) ->
case maps:next(Iterator) of case maps:next(Iterator) of
@ -741,7 +725,7 @@ getObjectCode(Module) ->
_ -> {undefined, undefined} _ -> {undefined, undefined}
end. end.
reloadIfNecessary(Module, OldBinary, Binary, Filename) ->
reloadIfNecessary(Module, OldBinary, Binary, Filename, SwSyncNode) ->
case Binary =/= OldBinary of case Binary =/= OldBinary of
true -> true ->
%% Try to load the module... %% Try to load the module...
@ -749,20 +733,18 @@ reloadIfNecessary(Module, OldBinary, Binary, Filename) ->
{module, Module} -> {module, Module} ->
case code:load_binary(Module, Filename, Binary) of case code:load_binary(Module, Filename, Binary) of
{module, Module} -> {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} -> {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;
{error, nofile} -> {error, nofile} ->
case code:load_binary(Module, Filename, Binary) of case code:load_binary(Module, Filename, Binary) of
{module, Module} -> {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} -> {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;
{error, embedded} -> {error, embedded} ->
case code:load_file(Module) of %% Module is not yet loaded, load it. case code:load_file(Module) of %% Module is not yet loaded, load it.
@ -770,11 +752,10 @@ reloadIfNecessary(Module, OldBinary, Binary, Filename) ->
{error, nofile} -> {error, nofile} ->
case code:load_binary(Module, Filename, Binary) of case code:load_binary(Module, Filename, Binary) of
{module, Module} -> {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} -> {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 end
end; end;
@ -800,15 +781,15 @@ recompileSrcFile(SrcFile, SwSyncNode) ->
case CompileFun(RightFileDir, [binary, return | Options]) of case CompileFun(RightFileDir, [binary, return | Options]) of
{ok, Module, Binary, Warnings} -> {ok, Module, Binary, Warnings} ->
printResults(Module, RightFileDir, [], Warnings), printResults(Module, RightFileDir, [], Warnings),
reloadIfNecessary(Module, OldBinary, Binary, Filename),
reloadIfNecessary(Module, OldBinary, Binary, Filename, SwSyncNode),
{ok, [], Warnings}; {ok, [], Warnings};
{ok, [{ok, Module, Binary, Warnings}], Warnings2} -> {ok, [{ok, Module, Binary, Warnings}], Warnings2} ->
printResults(Module, RightFileDir, [], Warnings ++ Warnings2), printResults(Module, RightFileDir, [], Warnings ++ Warnings2),
reloadIfNecessary(Module, OldBinary, Binary, Filename),
reloadIfNecessary(Module, OldBinary, Binary, Filename, SwSyncNode),
{ok, [], Warnings ++ Warnings2}; {ok, [], Warnings ++ Warnings2};
{ok, multiple, Results, Warnings} -> {ok, multiple, Results, Warnings} ->
printResults(Module, RightFileDir, [], 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, [], Warnings};
{ok, OtherModule, _Binary, Warnings} -> {ok, OtherModule, _Binary, Warnings} ->
Desc = io_lib:format("Module definition (~p) differs from expected (~s)", [OtherModule, filename:rootname(filename:basename(RightFileDir))]), 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), printResults(Module, RightFileDir, Errors, Warnings),
{ok, Errors, Warnings}; {ok, Errors, Warnings};
_Err -> _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; end;
undefined -> undefined ->
case esUtils:tryGetModOptions(Module) of case esUtils:tryGetModOptions(Module) of
@ -833,8 +813,7 @@ recompileSrcFile(SrcFile, SwSyncNode) ->
setOptions(RootSrcDir, Options), setOptions(RootSrcDir, Options),
recompileSrcFile(SrcFile, SwSyncNode); 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 end
end. end.

Loading…
Cancel
Save