Files
healthlog/docs/backlog/stats-nablyudaemost.md
T
av 8331328134 Дозакрыты находки ревью по слиянию сущностей
- Правило покрытия получило второй разряд (условный, как у точек), запрет
  вырождения формы и счёт содержательных элементов ряда: скелет из скаляров и
  ряд из null больше не затирают маршрут. Победитель внутри доставки стал
  функцией множества версий — общим помощником с точками, — а провенанс
  поднимается и при совпавшем хеше, иначе отложенная доставка возвращала витрину
  к прежнему содержимому.
- Одно поле не того типа больше не уносит сущность, а пропуски видны в учётной
  записи доставки (миграция 00008, NULL = «не измерялось»); каноническая форма
  считается один раз и вне транзакции; откат бинаря поверх новой схемы отказывает
  на старте; текст ошибки разбора не несёт значений из тела.
- Ревью кода профилем deep (девять проходов) нашло две регрессии и обе закрыты:
  безусловный второй разряд запирал законный досчёт навсегда, а выбор победителя
  был квадратичен по числу присланных версий одного ключа.
2026-08-02 16:38:18 +03:00

2.9 KiB

Наблюдаемость: /stats

Приоритет: средний

Тихо сломавшаяся автоматизация — главный эксплуатационный риск коллектора: данные просто перестают приходить, и заметить это можно только по молчанию. Расписание HAE — пожелание, а не гарантия (находка 28), так что молчание случается штатно.

/stats отвечает на «жив ли поток» без чтения логов: последняя доставка по каждой автоматизации, счётчики за сутки, тишина в часах, доля доставок с ошибкой разбора, строки без кода в словаре категориальных значений.

Готово, когда по одному запросу видно, какая из автоматизаций замолчала и когда.

Отдельной строкой — отставание фоновой свёртки: длина очереди (parse_status = 'pending') и возраст самой старой неразобранной доставки. Сегодня об этом говорят только две метки в логе (WARN «доставка ждала свёртки дольше пяти минут» и INFO о размере задолженности при старте), а /healthz статичен и здорового сервиса от сервиса с сотней несвёрнутых тел не отличает. Пришло из задачи «Разнести ответ приёма и свёртку доставки»: там числа намеренно не заводились, чтобы не предрешать форму счётчиков этой задачи.

Длина очереди обязана быть видна и без WARN. После миграции, переводящей доставки в pending, весь исторический бэклог встаёт в очередь перед свежими доставками, а warnLag на это время намеренно подавлен (startupDone) — то есть отставание по конструкции не WARN-ится ровно тогда, когда оно максимально, и бэклог идёт молча при зелёном /healthz. Пришло из дозакрытия находок ревью по слиянию сущностей (проход ops, находка O1); оракула нет — он потребовал бы десятков тысяч доставок.

Активное уведомление — отдельная задача, здесь только факт.