3.8 KiB
3.8 KiB
TeleCart Pulse Heartbeat Telemetry
Цель
Раз в час отправлять телеметрию (heartbeat) на TeleCart Pulse, чтобы фиксировать состояние магазина и версии окружения без участия пользователя.
Backend (module/oc_telegram_shop/upload/oc_telegram_shop)
framework/TeleCartPulse/TeleCartPulseService.php- Новый метод
handleHeartbeat()собирает данные: домен (черезUtils::getCurrentDomain()), username бота (черезTelegramService::getMe()), версии PHP, модуля (изcomposer.json), OpenCart (VERSIONиVERSION_CORE), текущий UTC timestamp. - Последний успешный пинг кешируется (ключ
telecart_pulse_heartbeat, TTL 1 час) через существующийCacheInterface. - Подпись heartbeat выполняется через отдельный
PayloadSigner, который использует секретpulse.heartbeat_secret/PULSE_HEARTBEAT_SECRET. Логируются предупреждения при ошибках кеша/бота/подписи. - Отправка идет на эндпоинт
heartbeatс таймаутом 2 секунды и заголовкомX-TELECART-VERSION, взятым изcomposer.json.
- Новый метод
framework/TeleCartPulse/TeleCartPulseServiceProvider.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 TeleCart 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 в админку.