Files
healthlog/docs/tasks/items/merge-counters-in-db.md
T
avandClaude Opus 5 a53d0f0f2f задачи: мета переехала в блок, поле «Хук» стало «Зачем»
49 файлов, миграция сделана командой tasks.py check --fix — той самой, ради
которой в скрипте оставлена читаемость старой формы. Побочно тот же прогон
проставил тег decomposed целям, у которых есть задачи: это его штатная работа.

check после миграции зелёный, индексы согласованы.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-03 17:31:29 +03:00

3.2 KiB
Raw Blame History

Счётчики слияния переживают ротацию логов

  • Секция: инфра
  • Зачем: единственный след несравнимых наборов — строка WARN в docker-логе с ротацией 3×10 МБ: событие может произойти и не оставить ничего
  • Теги: goal:observability

Вынуто ревью кода задачи pravilo-sliyaniya-tochek (профиль deep, проход негативного пространства, подтверждено эксплуатационным).

Что не так

Решение не реализовывать объединение полей при несравнимых наборах стоит на одном аргументе: «вместо реализации — счётчик, который скажет, если событие наступит». Сказать он может только в одну сторону — строкой WARN в stdout контейнера.

docker-compose.yml держит json-file с max-size: 10m, max-file: 3. При ~288 доставках в сутки это порядка кварталов, а ожидаемая частота события — «ни разу за 99 доставок». Штатный сценарий: событие происходит ночью, логи никто не грепал в этот месяц, строка уходит в ротацию, и в системе не остаётся ни одного свидетельства. Ни колонки в delivery, ни /stats, ни файла.

То есть обещание «событие будет видно, а не додумано» на практике не выполняется.

Что делать

Положить overwrites и incomparable в строку delivery — миграция плюс запись в FinishParse, которая эту строку всё равно трогает. Тогда «было ли когда-нибудь несравнимо» это один SELECT, живущий столько же, сколько витрина.

Заодно стоит решить смежное, найденное тем же проходом: сегодня в логе неразличимы «правило полноты сработало» и «всё ушло в тай-брейк». Два разных состояния мира дают одинаковую картину overwrites=N, incomparable=0, то есть отказ правила выглядит как здоровая работа. Отдельный счётчик исходов Superset/Subset рядом с Overwrites это закрывает.

Связано

  • stats-endpoint — то же наблюдение нужно и там.
  • rod-agregacii-i-katalog — придёт к вопросу о тай-брейке и потребует эксплуатационной истории, которой без этой задачи не будет: мерить придётся снова по архиву, а он к тому моменту подрезан.