Files
portal/app/resources/views/emails/scheduler_heartbeat_missing_text.blade.php
T
Дмитрий c76038d076 feat(ops): scheduler heartbeat — пульс 11 cron-задач + watcher (hole #6)
Закрывает дыру #6 из аудита журналирования 23.05.2026.

Что:
* `scheduler_heartbeats` таблица (SaaS-level, PK=command_name, без RLS)
* `SchedulerHeartbeatTracker` сервис — UPSERT через pgsql_supplier (BYPASSRLS),
  recordRun(callable) + recordRunResult(name, success, error, ms)
* `routes/console.php` — 11 cron-задач обёрнуты onSuccess/onFailure хуками
  (минимально-инвазивно, без правки самих джобов)
* `scheduler:check-heartbeats` команда — hourly МСК:
  - алертит при пропавшем пульсе (>2× ожидаемого интервала)
  - алертит при consecutive_failures >= 3
  - dedup 60 мин, пишет incidents_log (severity=high) + Mail на kdv1@bk.ru
* `SchedulerHeartbeatMissingMail` mailable + blade

NB: используется `onSuccess()` а не `after()` — `after()` срабатывает при любом
исходе и ложно обновлял бы last_success_at при failure (правильный поведенческий
паттерн = onSuccess + onFailure). consecutive_failures корректно растёт через
ON CONFLICT DO UPDATE +1.

Schema bump v8.29→v8.30. +1 слово в cspell-words.txt (FQCN).

Тесты: 8/8 passed (24 assertions, ~1.6s) — recordRun success/failure,
SchedulerCheckHeartbeats missing pulse + failure spike + dedup + Mailable.

Plan: docs/superpowers/plans/2026-05-23-7-holes-overview.md (#6).
2026-05-23 11:48:20 +03:00

23 lines
1.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Scheduler Heartbeat: ПРОПАВШАЯ ЗАДАЧА
======================================
Команда: {{ $commandName }}
Причина: {{ $reason }}
Consecutive ошибок: {{ $consecutiveFailures }}
Время: {{ $now }} (МСК)
@if($lastError)
Последняя ошибка:
{{ $lastError }}
@endif
ВНИМАНИЕ: cron-задача {{ $commandName }} не даёт пульса.
Это может означать, что планировщик Laravel не работает, команда зависла,
или процесс завершается с ошибкой.
Необходимо:
1. Проверить scheduler_heartbeats через админку или вручную.
2. Проверить логи: storage/logs/laravel.log на сервере.
3. Убедиться, что crontab/supervisor работает на боевом сервере.
Это автоматическое сообщение от команды scheduler:check-heartbeats (Лидерра).