소스 검색

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

master
SisMaker 4 년 전
부모
커밋
0dcd24c86e
3개의 변경된 파일63개의 추가작업 그리고 94개의 파일을 삭제
  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 파일 보기

@ -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() ->

+ 9
- 18
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.

+ 53
- 74
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.

불러오는 중...
취소
저장