Service Framework
Service Framework
Обзор
Service Framework управляет фоновыми службами портала:
Событие (API) → eventDispatcher → Event Receivers → portal_jobs → WorkerКомпоненты
| Компонент | Назначение |
|---|---|
portal_services | Реестр служб (audit, notifications) |
portal_jobs | Очередь заданий |
event_receivers | Подписчики на события |
| Worker | Обработка очереди (docker compose сервис worker) |
API (только portal_admin)
| Метод | Путь | Описание |
|---|---|---|
| GET | /admin/dashboard | Обзор: статистика, аудит |
| GET | /services | Список служб |
| PATCH | /services/{key} | { "isEnabled": true, "cronEnabled": true, "cronExpression": "0 3 * * *", "cronJobType": "adSync.run" } |
| POST | /services/{key}/run | Ручной запуск (напр. ad-sync) |
| GET | /jobs | Очередь заданий |
| POST | /jobs/{id}/retry | Повторить задание |
| GET | /event-receivers | Подписчики (?listId= — только для списка) |
| POST | /event-receivers | Создать подписчик |
| PATCH | /event-receivers/{id} | Обновить |
| DELETE | /event-receivers/{id} | Удалить |
Встроенные службы
- audit — запись в
audit_logs(job:audit.logEvent) - ad-sync — импорт пользователей из LDAP/AD (job:
adSync.run) - notifications — отправка почты через SMTP (
notifications.sendEmail,notifications.sendEventEmail)
Cron-расписание
Планировщик работает в Portal.Worker (CronSchedulerService). Для службы можно задать:
| Поле | Описание |
|---|---|
cron_enabled | Включить автозапуск |
cron_expression | Выражение cron (5 полей): мин час день месяц день_недели |
cron_job_type | Тип задания (по умолчанию для ad-sync: adSync.run) |
cron_last_run_at | Время последнего запуска |
Пример: 0 3 * * * — каждый день в 03:00. Настройка в админке → Службы → Cron.
Переменная CRON_RELOAD_INTERVAL_MS (по умолчанию 60000) — как часто worker перечитывает расписание из БД.
Добавление обработчика задания
- Реализуйте обработчик в
Portal.Worker(интерфейсIJobHandler) или соберите пакет.portalevent - Зарегистрируйте тип задания в
BuiltinServices/JobProcessor - Добавьте Event Receiver через админку или seed
Переменные окружения Worker
WORKER_POLL_INTERVAL_MS— интервал опроса (по умолчанию 5000)WORKER_BATCH_SIZE— размер пакета (по умолчанию 10)CRON_RELOAD_INTERVAL_MS— перезагрузка cron из БД (по умолчанию 60000)