В статье описаны принципы работы модуля, включая пошаговый алгоритм открытия услуги, механизмы синхронизации ресурсов и систему логирования взаимодействий.
Алгоритм открытия услуги
После заказа и оплаты услуги Clouden последовательно выполняет следующие шаги:
- Проверка доменного имени.
- Назначение IP-адреса.
- Создание пользователя.
- Обработка результата создания пользователя.
- Сбор данных услуги.
- Активация услуги
- Создание бесплатного доменного имени.
- Указание PTR записи.
Проверка доменного имени
Система проверяет, указано ли доменное имя в заказе:
- если поле заполнено — используется значение клиента;
- если поле пустое — Clouden генерирует домен на основе шаблона из настроек тарифа. Когда домен генерируется автоматически, система система затем создаст его на сервере для бесплатного доменного имени.
Назначение IP-адреса
Если услуге необходим выделенный IP-адрес, Clouden:
- Отправляет API-запрос в IPmanager на получение свободного адреса.
- Получает свободный адрес и резервирует его за услугой.
Создание пользователя
Clouden вызывает метод user.add.finish и передаёт параметры:
- логин и пароль пользователя;
- значения ресурсов из шаблона учётной записи, определённые в содержании тарифного плана Clouden;
- доменное имя (указанное клиентом или сгенерированное).
На основе этих данных в 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-доменом, который уже существует. В таком случае повторяется попытка создания пользователя, но без доменного имени.
Если ответ не получен в течение тайм-аута, Clouden выполняет 10 опросов списка пользователей с интервалом в 1 секунду. Если пользователь обнаружен, операция считается завершённой успешно. В противном случае операция создания пользователя завершается ошибкой и отображается в разделе "Текущие операции" с соответствующей пометкой.
Сбор данных услуги
После успешного создания пользователя Clouden начинает собирать данные о вновь созданной услуге. Clouden отправляет API-запрос (domain.record) в ispmanager, чтобы узнать сервера имён домена. Эта информация необходима для уведомления об открытии услуги. Если запрос завершился ошибкой, ошибка игнорируется.
Если аккаунт пользователя в ispmanager создан без выделенного IP-адреса, то биллинговая платформа отправляет API-запрос (ipaddr — для business и host, ipaddr.list — для Lite) для определения списка IP-адресов, доступных пользователю. Эта информация необходима для уведомления об открытии услуги. Если запрос завершается ошибкой, операция открытия услуги считается неудачной и отмечается ошибкой.
Активация услуги
После успешного сбора информации:
- статус услуги в Clouden меняется на "Активен";
- клиенту отправляется письмо об открытии услуги.
Создание бесплатного доменного имени
Чтобы создать запись поддомена, выполняется API-запрос (domain.record.edit) к серверу для бесплатного доменного имени.
Указание PTR записи
Если услуга использует выделенный IP-адрес:
- Clouden отправляет запрос ip.edit в IPmanager;
- в качестве PTR-записи для IP-адреса указывается домен услуги.
Синхронизация
Модуль обработки ISPmanager периодически сверяет состояние услуги в Clouden с состоянием пользователя в ISPmanager. Соответствие устанавливается по имени пользователя: значение поля Имя пользователя в разделе Товары/Услуги → Виртуальный хостинг должно совпадать с именем пользователя в ISPmanager.
Синхронизация статуса
При cинхронизации статуса услуг:
- выбираются все услуги, подключённые к обработчику ISPmanager;
- сравнивается статус услуги в Clouden и состояние пользователя в ISPmanager:
- если в Clouden услуга имеет статус "Активен", а в ISPmanager соответствующий пользователь выключен, то биллинговая платформа включает пользователя;
- если в Clouden услуга в статусе "Остановлен", а в ISPmanager пользователь включен, то отправляется запрос на выключение пользователя.
Синхронизация статуса выполняется ежедневно.
Синхронизация ресурсов
Синхронизация шаблонов учётной записи выполняется раз в три дня. Сравниваются шаблоны учётных записей в Clouden и ISPmanager:
- если шаблоны совпадают, проверяются значения ресурсов. При расхождении Clouden выполняет API-запрос (user.edit) к ISPmanager и меняет значение ресурса на то, которое установлено в биллинговой платформе;
- если шаблоны не совпадают, Clouden:
- выполняет API-запрос (user.edit) к ISPmanager и применяет шаблон из Clouden указанный в биллинговой платформе;
- корректирует значения ресурсов.
Для ISPmanager Business задача синхронизации ресурсов получает название узла кластера, на котором находится пользователь, и сохраняет эту информацию в Clouden.
За синхронизацию статуса и ресурсов отвечает задание планировщика 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 поддерживает сбор статистики по ресурсам, описанным в статье Содержание тарифа. ISPmanager. Статистика собирается за предыдущий день.
За сбор статистики отвечает задание планировщика cron — statdaily.cron.