Добавлен Swagger #20

This commit is contained in:
2026-05-09 18:15:45 +03:00
parent a34e36b966
commit a35d6f7acc
9 changed files with 419 additions and 51 deletions
+40 -23
View File
@@ -10,29 +10,29 @@ start(_StartType, _StartArgs) ->
{ok, Pid} ->
% Определяем список узлов кластера, если режим CLUSTER_MODE=true
Nodes = case os:getenv("CLUSTER_MODE", "false") of
"true" ->
DnsName = os:getenv("DNS_NAME", "eventhub-node"),
try inet:getaddrs(DnsName, inet) of
{ok, IPs} when is_list(IPs), IPs /= [] ->
% Получаем имена всех узлов Erlang, зарегистрированных в EPMD
AllNodes = lists:flatmap(fun(IP) ->
case erl_epmd:names(IP) of
{ok, Names} ->
[list_to_atom(Name ++ "@" ++ Name) || {Name, _Port} <- Names,
lists:prefix("eventhub-node", Name)];
_ -> []
end
end, IPs),
% Исключаем свой узел, чтобы не подключаться к самому себе
AllNodes -- [node()];
_ -> []
catch
_:_ ->
io:format("DNS lookup failed, starting as first node~n"),
[]
end;
_ -> []
end,
"true" ->
DnsName = os:getenv("DNS_NAME", "eventhub-node"),
try inet:getaddrs(DnsName, inet) of
{ok, IPs} when is_list(IPs), IPs /= [] ->
% Получаем имена всех узлов Erlang, зарегистрированных в EPMD
AllNodes = lists:flatmap(fun(IP) ->
case erl_epmd:names(IP) of
{ok, Names} ->
[list_to_atom(Name ++ "@" ++ Name) || {Name, _Port} <- Names,
lists:prefix("eventhub-node", Name)];
_ -> []
end
end, IPs),
% Исключаем свой узел, чтобы не подключаться к самому себе
AllNodes -- [node()];
_ -> []
catch
_:_ ->
io:format("DNS lookup failed, starting as first node~n"),
[]
end;
_ -> []
end,
case Nodes of
[] ->
io:format("Cluster: no nodes found or first node~n");
@@ -45,6 +45,7 @@ start(_StartType, _StartArgs) ->
calendar_html_renderer:init_cache(),
start_http(), % Пользовательский API (8080)
start_admin_http(), % Административный API (8445)
start_swagger_http(), % Swagger UI и спецификация (8447)
application:ensure_all_started(prometheus),
application:ensure_all_started(prometheus_cowboy),
init_default_admins(),
@@ -153,6 +154,22 @@ start_admin_http() ->
io:format("WebSocket started on ports ~p (user) and ~p (admin)~n", [PortWs, PortAdminWs]).
%% ===================================================================
%% Swagger HTTP (порт 8447) — документация API
%% ===================================================================
start_swagger_http() ->
PortSwagger = get_env_int(swagger_http_port, 8447),
Dispatch = cowboy_router:compile([
{'_', [
{"/", swagger_docs_handler, []},
{"/[...]", swagger_docs_handler, []}
]}
]),
Middlewares = [cowboy_router, cowboy_handler],
Env = #{dispatch => Dispatch},
cowboy:start_clear(swagger_http, [{port, PortSwagger}], #{env => Env, middlewares => Middlewares}),
io:format("Swagger HTTP server started on port ~p~n", [PortSwagger]).
%% ---------- Инициализация администраторов ----------
init_default_admins() ->
case core_admin:list_all() of