src/core/core_verification.erl View File
| 15 | calendar:datetime_to_gregorian_seconds(calendar:universal_time()) + ?TOKEN_LIFETIME_HOURS * 3600),
|
| 16 | mnesia:dirty_write(#verification{token = Token, user_id = UserId, expires_at = Expires}),
|
| 17 | {ok, Token, Expires}.
|
| 25 | verify_token(Token) ->
|
| 26 | case mnesia:dirty_read(verification, Token) of
|
| 27 | [#verification{user_id = UserId, expires_at = Expires}] ->
|
| 58 | delete_token(Token) ->
|
| 59 | mnesia:dirty_delete(verification, Token),
|
| 60 | ok.
|
| 63 | find_token(UserId) ->
|
| 64 | case mnesia:dirty_match_object(#verification{user_id = UserId, _ = '_'}) of
|
| 65 | [#verification{token = Token, expires_at = ExpiresAt} | _] ->
|
| 75 | {error, not_found} ->
|
| 76 | case mnesia:transaction(fun() -> mnesia:read(user, UserId) end) of
|
| 77 | {atomic, [_ | _]} -> true; |
src/core/core_waitlist.erl View File
| 19 | },
|
| 20 | case mnesia:dirty_write(Entry) of
|
| 21 | ok -> {ok, Entry};
|
| 26 | get_by_id(Id) ->
|
| 27 | case mnesia:dirty_read(waitlist_entry, Id) of
|
| 28 | [E] -> {ok, E};
|
| 38 | E2 = E1#waitlist_entry{updated_at = calendar:universal_time()},
|
| 39 | case mnesia:dirty_write(E2) of
|
| 40 | ok -> {ok, E2};
|
| 51 | list_by_event(EventId) ->
|
| 52 | mnesia:dirty_index_read(waitlist_entry, EventId, #waitlist_entry.event_id).
|
src/eventhub_app.erl View File
| 48 | end,
|
| 49 | ok = infra_mnesia:configure_dump_log(),
|
| 50 | application:ensure_all_started(mnesia),
|
| 51 | ok = infra_mnesia:verify_dump_log(),
|
| 52 | ok = infra_mnesia:init_tables(),
|
| 53 | case infra_mnesia:wait_for_tables() of
|
| 54 | ok -> ok;
|
| 55 | {error, WaitReason} -> error({mnesia_tables_not_ready, WaitReason})
|
| 56 | end, |
src/handlers/admin/admin_handler_node_metrics.erl View File
| 63 | % Остальные узлы кластера
|
| 64 | OtherNodes = mnesia:system_info(db_nodes) -- [node()],
|
| 65 | io:format("[NODE_METRICS] Aggregating metrics from ~p (local) and remote nodes: ~p~n", [node(), OtherNodes]),
|
| 109 | <<"run_queue">> => M#node_metric.run_queue,
|
| 110 | <<"mnesia_commits">> => M#node_metric.mnesia_commits,
|
| 111 | <<"mnesia_failures">> => M#node_metric.mnesia_failures,
|
| 112 | <<"table_sizes">> => M#node_metric.table_sizes,
|
| 165 | <<"run_queue">> => #{type => integer, description => <<"Run queue length (0 means idle)">>},
|
| 166 | <<"mnesia_commits">> => #{type => integer, description => <<"Mnesia transaction commits since boot">>},
|
| 167 | <<"mnesia_failures">> => #{type => integer, description => <<"Mnesia transaction failures since boot">>},
|
| 168 | <<"table_sizes">> => #{type => object, description => <<"Map of Mnesia table names to record counts">>, additionalProperties => #{type => integer}},
|
| 169 | <<"active_sessions">> => #{type => integer, description => <<"Number of active user/admin sessions">>}, |
src/handlers/admin/admin_ws_handler.erl View File
src/handlers/handler_utils.erl View File
src/infra/bot_controller.erl View File
src/infra/cluster_discovery.erl View File
| 45 | %% ------------------------------------------------------------------
|
| 46 | %% @doc Добавляет удалённый узел в Mnesia и реплицирует данные
|
| 47 | %% ------------------------------------------------------------------
|
| 48 | join_and_replicate(Node) ->
|
| 49 | case lists:member(Node, mnesia:system_info(db_nodes)) of
|
| 50 | true ->
|
| 51 | io:format("Node ~p already in Mnesia cluster, skipping~n", [Node]);
|
| 52 | false ->
|
| 53 | io:format("Adding node ~p to Mnesia cluster...~n", [Node]),
|
| 54 | infra_mnesia:add_cluster_nodes([Node])
|
| 55 | end. |
src/infra/infra_cleanup.erl View File
| 10 | %% Deletes run in bounded chunks so a single tick does not hold long
|
| 11 | %% Mnesia locks on large tables.
|
| 12 | %% ===================================================================
|
| 185 | delete_matching_loop(Table, Ms, Acc, ChunksLeft) ->
|
| 186 | case mnesia:transaction(fun() ->
|
| 187 | case mnesia:select(Table, Ms, ?CHUNK_SIZE, write) of
|
| 188 | '$end_of_table' ->
|
| 190 | {Ids, _Cont} ->
|
| 191 | lists:foreach(fun(Id) -> mnesia:delete({Table, Id}) end, Ids),
|
| 192 | Ids |