Добавлен Swagger #20
This commit is contained in:
+40
-23
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user