Some checks failed
Telegram Mini App Shop Builder / Compute version metadata (push) Has been cancelled
Telegram Mini App Shop Builder / Run Frontend tests (push) Has been cancelled
Telegram Mini App Shop Builder / Run Backend tests (push) Has been cancelled
Telegram Mini App Shop Builder / Run PHP_CodeSniffer (push) Has been cancelled
Telegram Mini App Shop Builder / Build module. (push) Has been cancelled
Telegram Mini App Shop Builder / release (push) Has been cancelled
3.8 KiB
3.8 KiB
MegaPay Pulse Heartbeat Telemetry
Цель
Раз в час отправлять телеметрию (heartbeat) на MegaPay Pulse, чтобы фиксировать состояние магазина и версии окружения без участия пользователя.
Backend (module/oc_telegram_shop/upload/oc_telegram_shop)
framework/MegaPayPulse/MegaPayPulseService.php- Новый метод
handleHeartbeat()собирает данные: домен (черезUtils::getCurrentDomain()), username бота (черезTelegramService::getMe()), версии PHP, модуля (изcomposer.json), OpenCart (VERSIONиVERSION_CORE), текущий UTC timestamp. - Последний успешный пинг кешируется (ключ
megapay_pulse_heartbeat, TTL 1 час) через существующийCacheInterface. - Подпись heartbeat выполняется через отдельный
PayloadSigner, который использует секретpulse.heartbeat_secret/PULSE_HEARTBEAT_SECRET. Логируются предупреждения при ошибках кеша/бота/подписи. - Отправка идет на эндпоинт
heartbeatс таймаутом 2 секунды и заголовкомX-MEGAPAY-VERSION, взятым изcomposer.json.
- Новый метод
framework/MegaPayPulse/MegaPayPulseServiceProvider.php- Регистрирует основной
PayloadSigner(поpulse.api_key) и отдельный heartbeat signer (поpulse.heartbeat_secretилиPULSE_HEARTBEAT_SECRET), инжектитLoggerInterface.
- Регистрирует основной
src/Handlers/TelemetryHandler.php+src/routes.php- Добавлен маршрут
heartbeat, который вызываетhandleHeartbeat()и возвращает{ status: "ok" }. Логгер пишет warning при проблемах.
- Добавлен маршрут
Frontend (frontend/spa)
src/utils/ftch.js: новая функцияheartbeat()вызываетapi_action=heartbeat.src/stores/Pulse.js: добавлен actionheartbeat, использующий новую API-функцию и логирующий результат.src/main.js: послеpulse.ingest(...)вызываетсяpulse.heartbeat()без блокировки цепочки.
Конфигурация / ENV
PULSE_API_HOST— базовый URL MegaPay Pulse (используется и для events, и для heartbeat).PULSE_TIMEOUT— общий таймаут HTTP (для heartbeat принудительно 2 секунды).PULSE_HEARTBEAT_SECRET(илиpulse.heartbeat_secretв настройках) — общий секрет для подписания heartbeat. Обязателен, иначе heartbeat не будет отправляться.pulse.api_key— прежний API ключ, используется только для event-инджеста.
Поведение
- Frontend (SPA) вызывает
heartbeatпри инициализации приложения (fire-and-forget). - Backend проверяет кеш. Если часа еще не прошло,
handleHeartbeat()возвращает без запросов. - При необходимости собираются данные, подписываются через heartbeat signer и отправляются POST-запросом на
/heartbeat. - Любые сбои (bot info, подпись, HTTP) логируются как warning, чтобы не тревожить пользователей.
TODO / Возможные улучшения
- При необходимости вынести heartbeat запуск в крон/CLI, чтобы не зависеть от фронтенда.
- Добавить метрики успешности heartbeat в админку.