From e88ad2078f173c0ec417918da53c27634774aae0 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Mon, 11 May 2026 22:28:44 +0800 Subject: [PATCH] add apps --- CODE_LOGIC_OVERVIEW.md | 4 +-- .../efka/include}/efka_tables.hrl | 0 {include => apps/efka/include}/service_pb.hrl | 0 {proto => apps/efka/proto}/service.proto | 0 apps/efka/rebar.config | 22 ++++++++++++ .../efka/src}/docker/docker_client.erl | 0 .../efka/src}/docker/docker_commands.erl | 0 .../src}/docker/docker_container_builder.erl | 0 .../src}/docker/docker_deploy_manager.erl | 0 .../efka/src}/docker/docker_deployer.erl | 0 .../efka/src}/docker/docker_events.erl | 0 .../efka/src}/docker/docker_helper.erl | 0 .../efka/src}/docker/docker_task_reporter.erl | 0 {src => apps/efka/src}/efka.app.src | 0 {src => apps/efka/src}/efka_app.erl | 0 {src => apps/efka/src}/efka_logger.erl | 0 {src => apps/efka/src}/efka_subscription.erl | 0 {src => apps/efka/src}/efka_sup.erl | 0 {src => apps/efka/src}/efka_util.erl | 0 .../efka/src}/micro_service/efka_service.erl | 0 .../src}/micro_service/efka_service_sup.erl | 0 .../efka/src}/models/service_model.erl | 0 .../efka/src}/protobuf/service_pb.erl | 0 .../efka/src}/tests/docker_commands_tests.erl | 0 .../efka/src}/transport/efka_client.erl | 0 .../efka/src}/transport/efka_client_cache.erl | 0 .../efka/src}/transport/efka_heartbeat.erl | 0 .../efka/src}/transport/service_channel.erl | 0 .../efka_docker_container_builder_tests.erl | 35 +++++++++++++++++++ docs/container_command_docker_json.md | 10 +++--- docs/service_websocket_protocol.md | 10 +++--- rebar.config | 29 ++------------- 32 files changed, 72 insertions(+), 38 deletions(-) rename {include => apps/efka/include}/efka_tables.hrl (100%) rename {include => apps/efka/include}/service_pb.hrl (100%) rename {proto => apps/efka/proto}/service.proto (100%) create mode 100644 apps/efka/rebar.config rename {src => apps/efka/src}/docker/docker_client.erl (100%) rename {src => apps/efka/src}/docker/docker_commands.erl (100%) rename {src => apps/efka/src}/docker/docker_container_builder.erl (100%) rename {src => apps/efka/src}/docker/docker_deploy_manager.erl (100%) rename {src => apps/efka/src}/docker/docker_deployer.erl (100%) rename {src => apps/efka/src}/docker/docker_events.erl (100%) rename {src => apps/efka/src}/docker/docker_helper.erl (100%) rename {src => apps/efka/src}/docker/docker_task_reporter.erl (100%) rename {src => apps/efka/src}/efka.app.src (100%) rename {src => apps/efka/src}/efka_app.erl (100%) rename {src => apps/efka/src}/efka_logger.erl (100%) rename {src => apps/efka/src}/efka_subscription.erl (100%) rename {src => apps/efka/src}/efka_sup.erl (100%) rename {src => apps/efka/src}/efka_util.erl (100%) rename {src => apps/efka/src}/micro_service/efka_service.erl (100%) rename {src => apps/efka/src}/micro_service/efka_service_sup.erl (100%) rename {src => apps/efka/src}/models/service_model.erl (100%) rename {src => apps/efka/src}/protobuf/service_pb.erl (100%) rename {src => apps/efka/src}/tests/docker_commands_tests.erl (100%) rename {src => apps/efka/src}/transport/efka_client.erl (100%) rename {src => apps/efka/src}/transport/efka_client_cache.erl (100%) rename {src => apps/efka/src}/transport/efka_heartbeat.erl (100%) rename {src => apps/efka/src}/transport/service_channel.erl (100%) create mode 100644 apps/efka/test/efka_docker_container_builder_tests.erl diff --git a/CODE_LOGIC_OVERVIEW.md b/CODE_LOGIC_OVERVIEW.md index 5646b32..5e5221b 100644 --- a/CODE_LOGIC_OVERVIEW.md +++ b/CODE_LOGIC_OVERVIEW.md @@ -1,6 +1,6 @@ # EFKA 当前代码逻辑梳理 -> 本文档记录当前阅读代码后对项目逻辑的理解,主要基于 `src/`、`include/`、`config/` 和 protobuf 生成文件。尚未覆盖每个边界条件和全部测试行为。 +> 本文档记录当前阅读代码后对项目逻辑的理解,主要基于 `apps/efka/src/`、`apps/efka/include/`、`config/` 和 protobuf 生成文件。尚未覆盖每个边界条件和全部测试行为。 ## 1. 项目定位 @@ -222,7 +222,7 @@ topic 匹配规则: "/usr/local/code/tmp/dets/service.dets" ``` -记录结构在 `include/efka_tables.hrl`: +记录结构在 `apps/efka/include/efka_tables.hrl`: - `service_id` - `container_name` diff --git a/include/efka_tables.hrl b/apps/efka/include/efka_tables.hrl similarity index 100% rename from include/efka_tables.hrl rename to apps/efka/include/efka_tables.hrl diff --git a/include/service_pb.hrl b/apps/efka/include/service_pb.hrl similarity index 100% rename from include/service_pb.hrl rename to apps/efka/include/service_pb.hrl diff --git a/proto/service.proto b/apps/efka/proto/service.proto similarity index 100% rename from proto/service.proto rename to apps/efka/proto/service.proto diff --git a/apps/efka/rebar.config b/apps/efka/rebar.config new file mode 100644 index 0000000..12ede5a --- /dev/null +++ b/apps/efka/rebar.config @@ -0,0 +1,22 @@ +{erl_opts, [{i, "include"}]}. + +{gpb_opts, [ + {i, "proto"}, + {f, ["service.proto"]}, + recursive, + {module_name_suffix, "_pb"}, + {o_erl, "src/protobuf"}, + {o_hrl, "include"}, + include_as_lib, + {strings_as_binaries, true}, + type_specs, + report, + verbose +]}. + +{provider_hooks, [ + {pre, [ + {compile, {protobuf, compile}}, + {clean, {protobuf, clean}} + ]} +]}. diff --git a/src/docker/docker_client.erl b/apps/efka/src/docker/docker_client.erl similarity index 100% rename from src/docker/docker_client.erl rename to apps/efka/src/docker/docker_client.erl diff --git a/src/docker/docker_commands.erl b/apps/efka/src/docker/docker_commands.erl similarity index 100% rename from src/docker/docker_commands.erl rename to apps/efka/src/docker/docker_commands.erl diff --git a/src/docker/docker_container_builder.erl b/apps/efka/src/docker/docker_container_builder.erl similarity index 100% rename from src/docker/docker_container_builder.erl rename to apps/efka/src/docker/docker_container_builder.erl diff --git a/src/docker/docker_deploy_manager.erl b/apps/efka/src/docker/docker_deploy_manager.erl similarity index 100% rename from src/docker/docker_deploy_manager.erl rename to apps/efka/src/docker/docker_deploy_manager.erl diff --git a/src/docker/docker_deployer.erl b/apps/efka/src/docker/docker_deployer.erl similarity index 100% rename from src/docker/docker_deployer.erl rename to apps/efka/src/docker/docker_deployer.erl diff --git a/src/docker/docker_events.erl b/apps/efka/src/docker/docker_events.erl similarity index 100% rename from src/docker/docker_events.erl rename to apps/efka/src/docker/docker_events.erl diff --git a/src/docker/docker_helper.erl b/apps/efka/src/docker/docker_helper.erl similarity index 100% rename from src/docker/docker_helper.erl rename to apps/efka/src/docker/docker_helper.erl diff --git a/src/docker/docker_task_reporter.erl b/apps/efka/src/docker/docker_task_reporter.erl similarity index 100% rename from src/docker/docker_task_reporter.erl rename to apps/efka/src/docker/docker_task_reporter.erl diff --git a/src/efka.app.src b/apps/efka/src/efka.app.src similarity index 100% rename from src/efka.app.src rename to apps/efka/src/efka.app.src diff --git a/src/efka_app.erl b/apps/efka/src/efka_app.erl similarity index 100% rename from src/efka_app.erl rename to apps/efka/src/efka_app.erl diff --git a/src/efka_logger.erl b/apps/efka/src/efka_logger.erl similarity index 100% rename from src/efka_logger.erl rename to apps/efka/src/efka_logger.erl diff --git a/src/efka_subscription.erl b/apps/efka/src/efka_subscription.erl similarity index 100% rename from src/efka_subscription.erl rename to apps/efka/src/efka_subscription.erl diff --git a/src/efka_sup.erl b/apps/efka/src/efka_sup.erl similarity index 100% rename from src/efka_sup.erl rename to apps/efka/src/efka_sup.erl diff --git a/src/efka_util.erl b/apps/efka/src/efka_util.erl similarity index 100% rename from src/efka_util.erl rename to apps/efka/src/efka_util.erl diff --git a/src/micro_service/efka_service.erl b/apps/efka/src/micro_service/efka_service.erl similarity index 100% rename from src/micro_service/efka_service.erl rename to apps/efka/src/micro_service/efka_service.erl diff --git a/src/micro_service/efka_service_sup.erl b/apps/efka/src/micro_service/efka_service_sup.erl similarity index 100% rename from src/micro_service/efka_service_sup.erl rename to apps/efka/src/micro_service/efka_service_sup.erl diff --git a/src/models/service_model.erl b/apps/efka/src/models/service_model.erl similarity index 100% rename from src/models/service_model.erl rename to apps/efka/src/models/service_model.erl diff --git a/src/protobuf/service_pb.erl b/apps/efka/src/protobuf/service_pb.erl similarity index 100% rename from src/protobuf/service_pb.erl rename to apps/efka/src/protobuf/service_pb.erl diff --git a/src/tests/docker_commands_tests.erl b/apps/efka/src/tests/docker_commands_tests.erl similarity index 100% rename from src/tests/docker_commands_tests.erl rename to apps/efka/src/tests/docker_commands_tests.erl diff --git a/src/transport/efka_client.erl b/apps/efka/src/transport/efka_client.erl similarity index 100% rename from src/transport/efka_client.erl rename to apps/efka/src/transport/efka_client.erl diff --git a/src/transport/efka_client_cache.erl b/apps/efka/src/transport/efka_client_cache.erl similarity index 100% rename from src/transport/efka_client_cache.erl rename to apps/efka/src/transport/efka_client_cache.erl diff --git a/src/transport/efka_heartbeat.erl b/apps/efka/src/transport/efka_heartbeat.erl similarity index 100% rename from src/transport/efka_heartbeat.erl rename to apps/efka/src/transport/efka_heartbeat.erl diff --git a/src/transport/service_channel.erl b/apps/efka/src/transport/service_channel.erl similarity index 100% rename from src/transport/service_channel.erl rename to apps/efka/src/transport/service_channel.erl diff --git a/apps/efka/test/efka_docker_container_builder_tests.erl b/apps/efka/test/efka_docker_container_builder_tests.erl new file mode 100644 index 0000000..dacc594 --- /dev/null +++ b/apps/efka/test/efka_docker_container_builder_tests.erl @@ -0,0 +1,35 @@ +-module(efka_docker_container_builder_tests). + +-include_lib("eunit/include/eunit.hrl"). + +port_bindings_are_rendered_for_docker_create_test() -> + Name = <<"nginx">>, + ContainerDir = "/tmp/efka-nginx/", + Create = #{ + <<"config">> => #{ + <<"image">> => <<"nginx:latest">>, + <<"exposed_ports">> => [ + #{<<"container_port">> => 80, <<"protocol">> => <<"tcp">>}, + #{<<"container_port">> => 443, <<"protocol">> => <<"tcp">>} + ] + }, + <<"host_config">> => #{ + <<"port_bindings">> => [ + #{<<"host_ip">> => <<>>, <<"host_port">> => 8080, <<"container_port">> => 80, <<"protocol">> => <<"tcp">>}, + #{<<"host_ip">> => <<>>, <<"host_port">> => 443, <<"container_port">> => 443, <<"protocol">> => <<"tcp">>} + ] + } + }, + Options = docker_container_builder:build_options(Name, ContainerDir, Create), + ?assertMatch(#{ + <<"ExposedPorts">> := #{ + <<"80/tcp">> := #{}, + <<"443/tcp">> := #{} + }, + <<"HostConfig">> := #{ + <<"PortBindings">> := #{ + <<"80/tcp">> := [#{<<"HostIp">> := <<>>, <<"HostPort">> := <<"8080">>}], + <<"443/tcp">> := [#{<<"HostIp">> := <<>>, <<"HostPort">> := <<"443">>}] + } + } + }, Options). diff --git a/docs/container_command_docker_json.md b/docs/container_command_docker_json.md index ae97cd6..a403996 100644 --- a/docs/container_command_docker_json.md +++ b/docs/container_command_docker_json.md @@ -4,11 +4,11 @@ 对应代码: -- command 接收入口:[src/transport/efka_client.erl](/usr/local/code/cloudkit/efka/src/transport/efka_client.erl:177) -- 部署任务管理:[src/docker/docker_deploy_manager.erl](/usr/local/code/cloudkit/efka/src/docker/docker_deploy_manager.erl:36) -- 部署执行:[src/docker/docker_deployer.erl](/usr/local/code/cloudkit/efka/src/docker/docker_deployer.erl:39) -- Docker JSON 构造:[src/docker/docker_container_builder.erl](/usr/local/code/cloudkit/efka/src/docker/docker_container_builder.erl:14) -- Docker API 调用:[src/docker/docker_commands.erl](/usr/local/code/cloudkit/efka/src/docker/docker_commands.erl:36) +- command 接收入口:[src/transport/efka_client.erl](/usr/local/code/cloudkit/efka/apps/efka/src/transport/efka_client.erl:177) +- 部署任务管理:[src/docker/docker_deploy_manager.erl](/usr/local/code/cloudkit/efka/apps/efka/src/docker/docker_deploy_manager.erl:36) +- 部署执行:[src/docker/docker_deployer.erl](/usr/local/code/cloudkit/efka/apps/efka/src/docker/docker_deployer.erl:39) +- Docker JSON 构造:[src/docker/docker_container_builder.erl](/usr/local/code/cloudkit/efka/apps/efka/src/docker/docker_container_builder.erl:14) +- Docker API 调用:[src/docker/docker_commands.erl](/usr/local/code/cloudkit/efka/apps/efka/src/docker/docker_commands.erl:36) ## 1. 协议入口 diff --git a/docs/service_websocket_protocol.md b/docs/service_websocket_protocol.md index 888fba6..95ddf9e 100644 --- a/docs/service_websocket_protocol.md +++ b/docs/service_websocket_protocol.md @@ -2,10 +2,10 @@ 本文档描述部署在 `efka` 主机上的 service 与 `efka` 之间的 WebSocket 通讯逻辑。当前接入实现位于: -- [service_channel.erl](/usr/local/code/cloudkit/efka/src/transport/service_channel.erl) -- [service.proto](/usr/local/code/cloudkit/efka/proto/service.proto) -- [efka_subscription.erl](/usr/local/code/cloudkit/efka/src/efka_subscription.erl) -- [efka_service.erl](/usr/local/code/cloudkit/efka/src/micro_service/efka_service.erl) +- [service_channel.erl](/usr/local/code/cloudkit/efka/apps/efka/src/transport/service_channel.erl) +- [service.proto](/usr/local/code/cloudkit/efka/apps/efka/proto/service.proto) +- [efka_subscription.erl](/usr/local/code/cloudkit/efka/apps/efka/src/efka_subscription.erl) +- [efka_service.erl](/usr/local/code/cloudkit/efka/apps/efka/src/micro_service/efka_service.erl) ## 1. 连接入口 @@ -56,7 +56,7 @@ service 与 `efka` 之间使用 WebSocket binary frame。每个业务 frame 的 ## 3. Protobuf 定义 -协议定义来自 `proto/service.proto`: +协议定义来自 `apps/efka/proto/service.proto`: ```protobuf syntax = "proto3"; diff --git a/rebar.config b/rebar.config index 81d46f6..3400147 100644 --- a/rebar.config +++ b/rebar.config @@ -1,34 +1,11 @@ -{erl_opts, [debug_info, {i, "include"}]}. +{erl_opts, [debug_info]}. + +{project_app_dirs, ["apps/*"]}. {plugins, [ {rebar3_gpb_plugin, ".*", {git, "https://github.com/lrascao/rebar3_gpb_plugin.git", {tag, "2.23.8"}}} ]}. -% ====================== -% 核心:强制指定 proto 路径 + 输出到你的 apps/sdlan -% ====================== -{gpb_opts, [ - {i, "proto"}, % 共享 proto 文件路径 - {src_dirs, ["proto"]}, % 源码目录(必须) - {f, ["service.proto"]}, - recursive, % 递归查找 proto 文件 - {module_name_suffix, "_pb"}, % 生成模块后缀 - {o_erl, "src/protobuf"}, % .erl 输出目录 - {o_hrl, "include"}, % .hrl 输出目录 - include_as_lib, % gpb.hrl 通过 -include_lib("gpb/include/gpb.hrl") - {strings_as_binaries, true}, % proto string → Erlang binary - type_specs, % 生成 type specs - report, % 编译报告 - verbose % 打印详细信息 -]}. - -{provider_hooks, [ - {pre, [ - {compile, {protobuf, compile}}, - {clean, {protobuf, clean}} - ]} -]}. - {deps, [ {sync, ".*", {git, "https://github.com/rustyio/sync.git", {branch, "master"}}}, {cowboy, ".*", {git, "https://github.com/ninenines/cowboy.git", {tag, "2.10.0"}}},