Перейти к содержимому

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 перечитывает расписание из БД.

Добавление обработчика задания

  1. Реализуйте обработчик в Portal.Worker (интерфейс IJobHandler) или соберите пакет .portalevent
  2. Зарегистрируйте тип задания в BuiltinServices / JobProcessor
  3. Добавьте Event Receiver через админку или seed

Переменные окружения Worker

  • WORKER_POLL_INTERVAL_MS — интервал опроса (по умолчанию 5000)
  • WORKER_BATCH_SIZE — размер пакета (по умолчанию 10)
  • CRON_RELOAD_INTERVAL_MS — перезагрузка cron из БД (по умолчанию 60000)