Реализовать модуль регистрации ботов #19

Closed
opened 2026-05-05 14:27:08 +03:00 by aleksey · 1 comment
Owner

Необходимо реализовать модуль регистрации ботов средствами erlang:

  • Использовать https://git.sabilin.com/EventHub/EventHubBack/raw/branch/master/src/core/core_user.erl
  • Создать в core_user методы регистрации и удаления юзеров с типом bot
  • модуль должен вычитывать из глобальных переменных настройки: количество ботов, дефолтный пароль (один на всех)
  • Формировать похожие на настоящие e-mail адреса в домене eventhub.com - настройка домена тоже в глобальных переменных
  • Предусмотреть возможность запуска только через erlang shell
Необходимо реализовать модуль регистрации ботов средствами erlang: - Использовать https://git.sabilin.com/EventHub/EventHubBack/raw/branch/master/src/core/core_user.erl - Создать в core_user методы регистрации и удаления юзеров с типом bot - модуль должен вычитывать из глобальных переменных настройки: количество ботов, дефолтный пароль (один на всех) - Формировать похожие на настоящие e-mail адреса в домене eventhub.com - настройка домена тоже в глобальных переменных - Предусмотреть возможность запуска только через erlang shell
Author
Owner

План выполнения Задачи #19 – Реализовать модуль регистрации ботов

1. Анализ и цели

Контекст: Для нагрузочного тестирования и имитации активности реальных пользователей необходимо создать пул ботов — специальных учётных записей с типом bot. Существующий модуль core_user.erl не предоставляет отдельных функций для массового создания или удаления таких пользователей.

Цели:

  • Расширить core_user.erl функциями для создания/удаления учётных записей с ролью bot.
  • Создать новый модуль bot_controller.erl, который будет управлять процессом регистрации ботов на основе глобальных настроек.
  • Реализовать генерацию реалистичных email-адресов в указанном домене.
  • Обеспечить запуск процесса регистрации только через Erlang shell (без API).

2. Детальный план реализации

2.1. Добавление новых функций в core_user.erl

Добавим две новые экспортируемые функции:

  • create_bot(Email, Password) -> {ok, User} | {error, Reason}.
    Создаёт пользователя с полем role = bot. В остальном логика аналогична текущей функции create/2, но с явным указанием роли bot.

  • delete_bot(Id) -> ok | {error, not_found}.
    Удаляет учётную запись бота. Для избежания накопления данных в Mnesia предлагается выполнять жёсткое удаление записи (mnesia:delete/1) вместо «мягкого» (status = deleted).

2.2. Создание модуля bot_controller.erl

Новый файл src/infra/bot_controller.erl будет содержать всю логику управления ботами.

API модуля:

  • register/0 — читает переменные окружения (BOT_COUNT, BOT_DOMAIN, BOT_DEFAULT_PASSWORD) и запускает процесс регистрации указанного количества ботов.
  • delete/0 — удаляет всех пользователей с ролью bot, используя core_user:delete_bot/1.

Переменные окружения (ожидаемые):

  • BOT_COUNT (целое число, обязательно) — количество генерируемых ботов.
  • BOT_DOMAIN (строка, по умолчанию "eventhub.com") — домен для email-адресов.
  • BOT_DEFAULT_PASSWORD (строка, по умолчанию "botpass123") — единый пароль для всех ботов.

2.3. Генерация имён ботов

Для формирования Email используется следующая схема:
"bot_" ++ random_string(8) ++ "@" ++ BotDomain.

Функция random_string/1 будет собрана из букв (строчные/заглавные) и цифр с использованием rand:uniform.

2.4. Обработка ошибок

  • Все операции с Mnesia должны быть обёрнуты в транзакции.
  • Если email уже существует, генерируется новый.
  • Логирование каждого созданного бота (только в консоль Erlang).

3. Интеграция

  1. Внести изменения в core_user.erl (добавить create_bot/2 и delete_bot/1).
  2. Создать модуль bot_controller.erl в src/infra/.
  3. Убедиться, что bot_controller не запускается автоматически при старте приложения (будет вызываться вручную из shell).

4. Тестирование

4.1. Запуск и проверка создания ботов

В консоли Erlang после старта приложения:

os:putenv("BOT_COUNT", "5").
os:putenv("BOT_DOMAIN", "eventhub-test.local").
os:putenv("BOT_DEFAULT_PASSWORD", "secret").

bot_controller:register().
% Ожидается: {ok, <<"registered 5 bots">>}

% Проверим:
length(mnesia:dirty_match_object(#user{role = bot, _ = '_'})).
% => 5

% Попытка повторной регистрации должна быть обработана (например, пропуск существующих или ошибка).

4.2. Удаление ботов

bot_controller:delete().
% => ok

length(mnesia:dirty_match_object(#user{role = bot, _ = '_'})).
% => 0

5. Результат

После выполнения этих шагов платформа EventHub получит инструмент для быстрого создания пула тестовых пользователей-ботов, что упростит нагрузочное тестирование и имитацию активности.

# План выполнения Задачи #19 – Реализовать модуль регистрации ботов ## 1. Анализ и цели **Контекст:** Для нагрузочного тестирования и имитации активности реальных пользователей необходимо создать пул ботов — специальных учётных записей с типом `bot`. Существующий модуль `core_user.erl` не предоставляет отдельных функций для массового создания или удаления таких пользователей. **Цели:** - Расширить `core_user.erl` функциями для создания/удаления учётных записей с ролью `bot`. - Создать новый модуль `bot_controller.erl`, который будет управлять процессом регистрации ботов на основе глобальных настроек. - Реализовать генерацию реалистичных email-адресов в указанном домене. - Обеспечить запуск процесса регистрации только через Erlang shell (без API). ## 2. Детальный план реализации ### 2.1. Добавление новых функций в `core_user.erl` Добавим две новые экспортируемые функции: - `create_bot(Email, Password) -> {ok, User} | {error, Reason}`. Создаёт пользователя с полем `role = bot`. В остальном логика аналогична текущей функции `create/2`, но с явным указанием роли `bot`. - `delete_bot(Id) -> ok | {error, not_found}`. Удаляет учётную запись бота. Для избежания накопления данных в Mnesia предлагается выполнять жёсткое удаление записи (`mnesia:delete/1`) вместо «мягкого» (`status = deleted`). ### 2.2. Создание модуля `bot_controller.erl` Новый файл `src/infra/bot_controller.erl` будет содержать всю логику управления ботами. **API модуля:** - `register/0` — читает переменные окружения (`BOT_COUNT`, `BOT_DOMAIN`, `BOT_DEFAULT_PASSWORD`) и запускает процесс регистрации указанного количества ботов. - `delete/0` — удаляет **всех** пользователей с ролью `bot`, используя `core_user:delete_bot/1`. **Переменные окружения (ожидаемые):** - `BOT_COUNT` (целое число, обязательно) — количество генерируемых ботов. - `BOT_DOMAIN` (строка, по умолчанию `"eventhub.com"`) — домен для email-адресов. - `BOT_DEFAULT_PASSWORD` (строка, по умолчанию `"botpass123"`) — единый пароль для всех ботов. ### 2.3. Генерация имён ботов Для формирования `Email` используется следующая схема: `"bot_" ++ random_string(8) ++ "@" ++ BotDomain`. Функция `random_string/1` будет собрана из букв (строчные/заглавные) и цифр с использованием `rand:uniform`. ### 2.4. Обработка ошибок - Все операции с Mnesia должны быть обёрнуты в транзакции. - Если email уже существует, генерируется новый. - Логирование каждого созданного бота (только в консоль Erlang). ## 3. Интеграция 1. Внести изменения в `core_user.erl` (добавить `create_bot/2` и `delete_bot/1`). 2. Создать модуль `bot_controller.erl` в `src/infra/`. 3. Убедиться, что `bot_controller` не запускается автоматически при старте приложения (будет вызываться вручную из shell). ## 4. Тестирование ### 4.1. Запуск и проверка создания ботов В консоли Erlang после старта приложения: ```erlang os:putenv("BOT_COUNT", "5"). os:putenv("BOT_DOMAIN", "eventhub-test.local"). os:putenv("BOT_DEFAULT_PASSWORD", "secret"). bot_controller:register(). % Ожидается: {ok, <<"registered 5 bots">>} % Проверим: length(mnesia:dirty_match_object(#user{role = bot, _ = '_'})). % => 5 % Попытка повторной регистрации должна быть обработана (например, пропуск существующих или ошибка). ``` ### 4.2. Удаление ботов ```erlang bot_controller:delete(). % => ok length(mnesia:dirty_match_object(#user{role = bot, _ = '_'})). % => 0 ``` ## 5. Результат После выполнения этих шагов платформа EventHub получит инструмент для быстрого создания пула тестовых пользователей-ботов, что упростит нагрузочное тестирование и имитацию активности.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: EventHub/EventHubBack#19