fix logger

This commit is contained in:
anlicheng 2026-04-21 10:21:50 +08:00
parent 51c7e008c1
commit dae690b20e

View File

@ -47,24 +47,29 @@ deploy(TaskId, ContainerDir, Params = #'ContainerDeployParams'{
container_name = ContainerName, container_name = ContainerName,
spec = #'ContainerSpec'{image = Image0} spec = #'ContainerSpec'{image = Image0}
}) when is_integer(TaskId), is_list(ContainerDir) -> }) when is_integer(TaskId), is_list(ContainerDir) ->
trace_log(TaskId, <<"info">>, <<"开始部署容器:"/utf8, ContainerName/binary>>), report_task_event(TaskId, <<"info">>, <<"开始部署容器:"/utf8, ContainerName/binary>>),
try try
ok = ensure_container_absent(TaskId, ContainerName), ok = ensure_container_absent(TaskId, ContainerName),
{ok, _Image} = ensure_image_ready(TaskId, Image0), {ok, Image} = ensure_image_ready(TaskId, Image0),
{ok, ContainerId} = create_container_and_config(TaskId, ContainerDir, Params), {ok, ContainerId} = create_container_and_config(TaskId, ContainerDir, Params),
ShortContainerId = short_container_id(ContainerId), ShortContainerId = short_container_id(ContainerId),
trace_log(TaskId, <<"info">>, <<"容器创建成功: "/utf8, ShortContainerId/binary>>), report_task_event(TaskId, <<"info">>, <<"容器创建成功: "/utf8, ShortContainerId/binary>>),
trace_log(TaskId, <<"info">>, <<"任务完成"/utf8>>), report_task_event(TaskId, <<"info">>, <<"任务完成"/utf8>>),
write_task_summary(TaskId, <<"success">>, ContainerName, Image, ContainerId),
efka_task_reporter:close(TaskId, ?TASK_SUCCESS) efka_task_reporter:close(TaskId, ?TASK_SUCCESS)
catch catch
throw:{deploy_error, Reason} -> throw:{deploy_error, Reason} ->
trace_log(TaskId, <<"error">>, Reason), report_task_event(TaskId, <<"error">>, Reason),
trace_log(TaskId, <<"error">>, <<"任务失败"/utf8>>), report_task_event(TaskId, <<"error">>, <<"任务失败"/utf8>>),
write_task_summary(TaskId, <<"fail">>, ContainerName, Image0, undefined),
write_task_failure_reason(TaskId, Reason),
efka_task_reporter:close(TaskId, ?TASK_FAIL); efka_task_reporter:close(TaskId, ?TASK_FAIL);
Class:Reason:Stacktrace -> Class:Reason:Stacktrace ->
Error = iolist_to_binary(io_lib:format("deploy crashed: ~p:~p ~p", [Class, Reason, Stacktrace])), Error = iolist_to_binary(io_lib:format("deploy crashed: ~p:~p ~p", [Class, Reason, Stacktrace])),
trace_log(TaskId, <<"error">>, Error), report_task_event(TaskId, <<"error">>, Error),
trace_log(TaskId, <<"error">>, <<"任务失败"/utf8>>), report_task_event(TaskId, <<"error">>, <<"任务失败"/utf8>>),
write_task_summary(TaskId, <<"fail">>, ContainerName, Image0, undefined),
write_task_failure_reason(TaskId, Error),
efka_task_reporter:close(TaskId, ?TASK_FAIL) efka_task_reporter:close(TaskId, ?TASK_FAIL)
end. end.
@ -78,27 +83,53 @@ normalize_image(Image) when is_binary(Image) ->
end, end,
iolist_to_binary(lists:join(<<"/">>, PrefixParts ++ [NormalizedLast])). iolist_to_binary(lists:join(<<"/">>, PrefixParts ++ [NormalizedLast])).
-spec trace_log(TaskId :: integer(), Level :: binary(), Msg :: binary()) -> no_return(). -spec report_task_event(TaskId :: integer(), Level :: binary(), Msg :: binary()) -> ok.
trace_log(TaskId, Level, Msg) when is_integer(TaskId), is_binary(Level), is_binary(Msg) -> report_task_event(TaskId, Level, Msg) when is_integer(TaskId), is_binary(Level), is_binary(Msg) ->
efka_task_reporter:stream(TaskId, Level, Msg), efka_task_reporter:stream(TaskId, Level, Msg).
Info = iolist_to_binary([<<"task_id=">>, integer_to_binary(TaskId), <<" ">>, Level, <<" ">>, Msg]),
-spec write_task_summary(integer(), binary(), binary(), binary(), undefined | binary()) -> ok.
write_task_summary(TaskId, Status, ContainerName, Image, ContainerId)
when is_integer(TaskId), is_binary(Status), is_binary(ContainerName), is_binary(Image) ->
Fields0 = [
<<"type=deploy_summary">>,
<<"task_id=">>, integer_to_binary(TaskId),
<<" status=">>, Status,
<<" container_name=">>, ContainerName,
<<" image=">>, Image
],
Fields = case ContainerId of
undefined ->
Fields0;
_ when is_binary(ContainerId) ->
Fields0 ++ [<<" container_id=">>, short_container_id(ContainerId)]
end,
efka_logger:write(iolist_to_binary(Fields)).
-spec write_task_failure_reason(integer(), binary()) -> ok.
write_task_failure_reason(TaskId, Reason) when is_integer(TaskId), is_binary(Reason) ->
Info = iolist_to_binary([
<<"type=deploy_failure_reason task_id=">>,
integer_to_binary(TaskId),
<<" reason=">>,
Reason
]),
efka_logger:write(Info). efka_logger:write(Info).
-spec ensure_container_absent(TaskId :: integer(), ContainerName :: binary()) -> ok. -spec ensure_container_absent(TaskId :: integer(), ContainerName :: binary()) -> ok.
ensure_container_absent(TaskId, ContainerName) when is_integer(TaskId), is_binary(ContainerName) -> ensure_container_absent(TaskId, ContainerName) when is_integer(TaskId), is_binary(ContainerName) ->
trace_log(TaskId, <<"info">>, <<"开始创建容器: "/utf8, ContainerName/binary>>), report_task_event(TaskId, <<"info">>, <<"开始创建容器: "/utf8, ContainerName/binary>>),
ok. ok.
-spec ensure_image_ready(TaskId :: integer(), Image0 :: binary()) -> {ok, binary()}. -spec ensure_image_ready(TaskId :: integer(), Image0 :: binary()) -> {ok, binary()}.
ensure_image_ready(TaskId, Image0) when is_integer(TaskId), is_binary(Image0) -> ensure_image_ready(TaskId, Image0) when is_integer(TaskId), is_binary(Image0) ->
Image = normalize_image(Image0), Image = normalize_image(Image0),
trace_log(TaskId, <<"info">>, <<"使用镜像:"/utf8, Image/binary>>), report_task_event(TaskId, <<"info">>, <<"使用镜像:"/utf8, Image/binary>>),
trace_log(TaskId, <<"info">>, <<"开始拉取镜像:"/utf8, Image/binary>>), report_task_event(TaskId, <<"info">>, <<"开始拉取镜像:"/utf8, Image/binary>>),
CB = fun CB = fun
({message, M}) -> ({message, M}) ->
trace_log(TaskId, <<"info">>, M); report_task_event(TaskId, <<"info">>, M);
({error, Error}) -> ({error, Error}) ->
trace_log(TaskId, <<"error">>, Error) report_task_event(TaskId, <<"error">>, Error)
end, end,
case docker_commands:pull_image(Image, CB) of case docker_commands:pull_image(Image, CB) of
ok -> ok ->
@ -135,7 +166,7 @@ create_config_file(TaskId, ContainerDir) when is_integer(TaskId), is_list(Contai
ok; ok;
{error, Reason} -> {error, Reason} ->
ReasonBin = list_to_binary(io_lib:format("~p", [Reason])), ReasonBin = list_to_binary(io_lib:format("~p", [Reason])),
trace_log(TaskId, <<"notice">>, <<"创建配置文件失败: "/utf8, ReasonBin/binary>>), report_task_event(TaskId, <<"notice">>, <<"创建配置文件失败: "/utf8, ReasonBin/binary>>),
ok ok
end. end.