Алгоритм открытия услуги
После заказа и оплаты услуги, BILLmanager начинает процесс ее открытия, который состоит из нескольких этапов:
Проверка доменного имени
Проверяется указано или нет доменное имя при заказе. Если клиент оставил поле "Доменное имя" пустым, BILLmanager генерирует домен на основе шаблона, указанного в настройках тарифа. Когда домен генерируется автоматически, система "запоминает", что его необходимо создать на сервере для бесплатного доменного имени.
Назначение IP-адреса
Если услуге необходим выделенный IP-адрес, BILLmanager:
- Отправляет API-запрос в IPmanager на получение свободного адреса.
- Получает свободный адрес и резервирует его за услугой.
Создание пользователя
BILLmanager вызывает метод user.add.finish и передаёт параметры:
- логин и пароль пользователя;
- значения ресурсов из шаблона учётной записи, определённые в содержании тарифного плана BILLmanager;
- доменное имя (указанное клиентом или сгенерированное).
На основе этих данных в ispmanager автоматически создаются:
- WWW-домен;
- DNS-зона;
- почтовый домен.
Если создаётся пользователь с лимитом на количество WWW-доменов — 0, то:
- при создании пользователя WWW-домен не будет создан;
- будут созданы почтовый домен и доменное имя (DNS).
Правило применяется отдельно к каждому типу домена.
Обработка результата создания пользователя
Создание пользователя в ISPmamager может завершиться одним из следующих ответов:
- Ok — пользователь был создан успешно;
- ошибка ERROR Error: Type: 'exists' Object: 'user' Value: '<имя пользователя>' — пользователь с таким именем уже существует. В таком случае повторяется попытка создания пользователя, но к его имени добавляется цифра 1. Например,
user_665становитсяuser_6651. Если существует иuser_6651, то повторяется попытка создания пользователя, но к его имени добавляется цифра 2, получаетсяuser_6652и т.д., пока процесс создания пользователя не завершится успешно; - ошибка ERROR Error: Type: 'exists' Object: 'name' Value: '<имя домена>' — пользователь создаётся с WWW-доменом, который уже существует. В таком случае повторяется попытка создания пользователя, но без доменного имени.
Если ответ не получен в течение тайм-аута, BILLmanager выполняет 10 опросов списка пользователей с интервалом в 1 секунду. Если пользователь обнаружен, операция считается завершённой успешно. В противном случае операция создания пользователя завершается ошибкой и отображается в разделе "Текущие операции" с соответствующей пометкой.
Сбор данных услуги
После успешного создания пользователя BILLmanager начинает собирать данные о вновь созданной услуге. BILLmanager отправляет API-запрос (domain.record) в ispmanager, чтобы узнать сервера имён домена. Эта информация необходима для уведомления об открытии услуги. Если запрос завершился ошибкой, ошибка игнорируется.
Если аккаунт пользователя в ispmanager создан без выделенного IP-адреса, то биллинговая платформа отправляет API-запрос (ipaddr — для business и host, ipaddr.list — для Lite) для определения списка IP-адресов, доступных пользователю. Эта информация необходима для уведомления об открытии услуги. Если запрос завершается ошибкой, операция открытия услуги считается неудачной и отмечается ошибкой.
Активация услуги
После успешного сбора информации:
- статус услуги в BILLmanager меняется на "Активен";
- клиенту отправляется письмо об открытии услуги.
Создание бесплатного доменного имени
Чтобы создать запись поддомена, выполняется API-запрос (domain.record.edit) к серверу для бесплатного доменного имени.
Указание PTR записи
Если услуга использует выделенный IP-адрес:
- BILLmanager отправляет запрос ip.edit в IPmanager;
- в качестве PTR-записи для IP-адреса указывается домен услуги.
Синхронизация
Модуль обработки ISPmanager периодически сверяет состояние услуги в BILLmanager с состоянием пользователя в ispmanager. Соответствие устанавливается по имени пользователя: значение поля Имя пользователя в разделе Товары/Услуги → Виртуальный хостинг должно совпадать с именем пользователя в ispmanager.
Синхронизация статуса
При cинхронизации статуса услуг:
- выбираются все услуги, подключённые к обработчику ISPmanager;
- сравнивается статус услуги в BILLmanager и состояние пользователя в ispmanager:
- если в BILLmanager услуга имеет статус "Активен", а в ispmanager соответствующий пользователь выключен, то биллинговая платформа включает пользователя;
- если в BILLmanager услуга в статусе "Остановлен", а в ispmanager пользователь включен, то отправляется запрос на выключение пользователя.
Синхронизация статуса выполняется ежедневно.
Синхронизация ресурсов
Синхронизация шаблонов учётной записи выполняется раз в три дня. Сравниваются шаблоны учётных записей в BILLmanager и ispmanager:
- если шаблоны совпадают, проверяются значения ресурсов. При расхождении BILLmanager выполняет API-запрос (user.edit) к ispmanager и меняет значение ресурса на то, которое установлено в биллинговой платформе;
- если шаблоны не совпадают, BILLmanager:
- выполняет API-запрос (user.edit) к ispmanager и применяет шаблон из BILLmanager указанный в биллинговой платформе;
- корректирует значения ресурсов.
Для ispmanager business задача синхронизации ресурсов получает название узла кластера, на котором находится пользователь, и сохраняет эту информацию в BILLmanager.
За синхронизацию статуса и ресурсов отвечает задание планировщика cron — processing.syncserver.cron.
Логирование
Лог взаимодействия биллинговой платформы с ISPmanager записывается в файл /usr/local/mgr5/var/pmispmgr5.log
В логе можно определить выполняемые операции по следующим записям:
- 'processing/pmispmgr5 --runningoperation <код текущей операции> -- command open ' — открытие услуги;
- 'processing/pmispmgr5 --runningoperation <код текущей операции> --command close' — закрытие услуги;
- 'processing/pmispmgr5 --command sync_server --module <код модуля обработки>' — синхронизация данных;
- 'processing/pmispmgr5 --command stat --module <код модуля обработки>' — сбор статистики.
Сбор статистики
Модуль обработки ISPmanager поддерживает сбор статистики по некоторым ресурсам. Статистика всегда собирается за предыдущий день.
За сбор статистики отвечает задание планировщика cron — statdaily.cron.