add apps
This commit is contained in:
parent
32dd08da9d
commit
e88ad2078f
@ -1,6 +1,6 @@
|
|||||||
# EFKA 当前代码逻辑梳理
|
# EFKA 当前代码逻辑梳理
|
||||||
|
|
||||||
> 本文档记录当前阅读代码后对项目逻辑的理解,主要基于 `src/`、`include/`、`config/` 和 protobuf 生成文件。尚未覆盖每个边界条件和全部测试行为。
|
> 本文档记录当前阅读代码后对项目逻辑的理解,主要基于 `apps/efka/src/`、`apps/efka/include/`、`config/` 和 protobuf 生成文件。尚未覆盖每个边界条件和全部测试行为。
|
||||||
|
|
||||||
## 1. 项目定位
|
## 1. 项目定位
|
||||||
|
|
||||||
@ -222,7 +222,7 @@ topic 匹配规则:
|
|||||||
"/usr/local/code/tmp/dets/service.dets"
|
"/usr/local/code/tmp/dets/service.dets"
|
||||||
```
|
```
|
||||||
|
|
||||||
记录结构在 `include/efka_tables.hrl`:
|
记录结构在 `apps/efka/include/efka_tables.hrl`:
|
||||||
|
|
||||||
- `service_id`
|
- `service_id`
|
||||||
- `container_name`
|
- `container_name`
|
||||||
|
|||||||
22
apps/efka/rebar.config
Normal file
22
apps/efka/rebar.config
Normal file
@ -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}}
|
||||||
|
]}
|
||||||
|
]}.
|
||||||
35
apps/efka/test/efka_docker_container_builder_tests.erl
Normal file
35
apps/efka/test/efka_docker_container_builder_tests.erl
Normal file
@ -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).
|
||||||
@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
对应代码:
|
对应代码:
|
||||||
|
|
||||||
- command 接收入口:[src/transport/efka_client.erl](/usr/local/code/cloudkit/efka/src/transport/efka_client.erl:177)
|
- 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/src/docker/docker_deploy_manager.erl:36)
|
- 部署任务管理:[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/src/docker/docker_deployer.erl:39)
|
- 部署执行:[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/src/docker/docker_container_builder.erl:14)
|
- 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/src/docker/docker_commands.erl:36)
|
- Docker API 调用:[src/docker/docker_commands.erl](/usr/local/code/cloudkit/efka/apps/efka/src/docker/docker_commands.erl:36)
|
||||||
|
|
||||||
## 1. 协议入口
|
## 1. 协议入口
|
||||||
|
|
||||||
|
|||||||
@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
本文档描述部署在 `efka` 主机上的 service 与 `efka` 之间的 WebSocket 通讯逻辑。当前接入实现位于:
|
本文档描述部署在 `efka` 主机上的 service 与 `efka` 之间的 WebSocket 通讯逻辑。当前接入实现位于:
|
||||||
|
|
||||||
- [service_channel.erl](/usr/local/code/cloudkit/efka/src/transport/service_channel.erl)
|
- [service_channel.erl](/usr/local/code/cloudkit/efka/apps/efka/src/transport/service_channel.erl)
|
||||||
- [service.proto](/usr/local/code/cloudkit/efka/proto/service.proto)
|
- [service.proto](/usr/local/code/cloudkit/efka/apps/efka/proto/service.proto)
|
||||||
- [efka_subscription.erl](/usr/local/code/cloudkit/efka/src/efka_subscription.erl)
|
- [efka_subscription.erl](/usr/local/code/cloudkit/efka/apps/efka/src/efka_subscription.erl)
|
||||||
- [efka_service.erl](/usr/local/code/cloudkit/efka/src/micro_service/efka_service.erl)
|
- [efka_service.erl](/usr/local/code/cloudkit/efka/apps/efka/src/micro_service/efka_service.erl)
|
||||||
|
|
||||||
## 1. 连接入口
|
## 1. 连接入口
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ service 与 `efka` 之间使用 WebSocket binary frame。每个业务 frame 的
|
|||||||
|
|
||||||
## 3. Protobuf 定义
|
## 3. Protobuf 定义
|
||||||
|
|
||||||
协议定义来自 `proto/service.proto`:
|
协议定义来自 `apps/efka/proto/service.proto`:
|
||||||
|
|
||||||
```protobuf
|
```protobuf
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|||||||
29
rebar.config
29
rebar.config
@ -1,34 +1,11 @@
|
|||||||
{erl_opts, [debug_info, {i, "include"}]}.
|
{erl_opts, [debug_info]}.
|
||||||
|
|
||||||
|
{project_app_dirs, ["apps/*"]}.
|
||||||
|
|
||||||
{plugins, [
|
{plugins, [
|
||||||
{rebar3_gpb_plugin, ".*", {git, "https://github.com/lrascao/rebar3_gpb_plugin.git", {tag, "2.23.8"}}}
|
{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, [
|
{deps, [
|
||||||
{sync, ".*", {git, "https://github.com/rustyio/sync.git", {branch, "master"}}},
|
{sync, ".*", {git, "https://github.com/rustyio/sync.git", {branch, "master"}}},
|
||||||
{cowboy, ".*", {git, "https://github.com/ninenines/cowboy.git", {tag, "2.10.0"}}},
|
{cowboy, ".*", {git, "https://github.com/ninenines/cowboy.git", {tag, "2.10.0"}}},
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user