P1: Довести статистику до upsert-счётчиков и дневных бакетов (вариант A) #42

Closed
opened 2026-07-17 18:21:31 +03:00 by cursor-ai · 2 comments
Owner

Проблема

Пробный stats_collector (#16) пишет append-only дельты в stats, но admin API по-прежнему считают метрики полными сканами доменных таблиц. Подписки simple ломают детект insert/update; таблица stats не читается.

Влияние

Нагрузка на Mnesia при открытии дашборда и section */stats растёт с размером таблиц; экспериментальный сборщик бесполезен и раздувает диск.

Ожидаемый результат

Единый путь: Mnesia detailed subscribe → ETS → upsert в stats_counter / stats_daily; logic_stats и section stats читают агрегаты. Totals через table_info где достаточно; by_day/by_status/by_role — из счётчиков. Backfill при старте. Append-only stats убран.

Критерии приёмки

  • Схема stats_counter + stats_daily (unique key, upsert)
  • Collector: detailed, корректные переходы статусов, подписки на users/events/calendars/reviews/reports/tickets/subscriptions/bookings
  • Backfill из доменных таблиц
  • Dashboard и section */stats читают агрегаты без full scan для by_day / breakdowns
  • Retention/cleanup для daily
  • Тесты collector + API stats
  • Спека обновлена

Файлы (подсказка)

  • src/infra/stats_collector.erl
  • src/logic/logic_stats.erl
  • src/infra/infra_mnesia.erl
  • include/records.hrl

Приоритет

P1

Продолжение #16. Выбран вариант A.

## Проблема Пробный `stats_collector` (#16) пишет append-only дельты в `stats`, но admin API по-прежнему считают метрики полными сканами доменных таблиц. Подписки `simple` ломают детект insert/update; таблица `stats` не читается. ## Влияние Нагрузка на Mnesia при открытии дашборда и section `*/stats` растёт с размером таблиц; экспериментальный сборщик бесполезен и раздувает диск. ## Ожидаемый результат Единый путь: Mnesia `detailed` subscribe → ETS → upsert в `stats_counter` / `stats_daily`; `logic_stats` и section stats читают агрегаты. Totals через `table_info` где достаточно; by_day/by_status/by_role — из счётчиков. Backfill при старте. Append-only `stats` убран. ## Критерии приёмки - [ ] Схема `stats_counter` + `stats_daily` (unique key, upsert) - [ ] Collector: `detailed`, корректные переходы статусов, подписки на users/events/calendars/reviews/reports/tickets/subscriptions/bookings - [ ] Backfill из доменных таблиц - [ ] Dashboard и section `*/stats` читают агрегаты без full scan для by_day / breakdowns - [ ] Retention/cleanup для daily - [ ] Тесты collector + API stats - [ ] Спека обновлена ## Файлы (подсказка) - `src/infra/stats_collector.erl` - `src/logic/logic_stats.erl` - `src/infra/infra_mnesia.erl` - `include/records.hrl` ## Приоритет P1 Продолжение #16. Выбран вариант A.
cursor-ai added the Task label 2026-07-17 18:21:31 +03:00
cursor-ai self-assigned this 2026-07-17 18:21:31 +03:00
Author
Owner

Беру в работу. Реализация варианта A: upsert-счётчики + дневные бакеты.

Беру в работу. Реализация варианта A: upsert-счётчики + дневные бакеты.
Author
Owner

Закрыто: upsert-счётчики stats_counter/stats_daily и переход logic_stats уже в main (миграции 20260717180000/190000, stats_collector detailed).

Закрыто: upsert-счётчики stats_counter/stats_daily и переход logic_stats уже в main (миграции 20260717180000/190000, stats_collector detailed).
Sign in to join this conversation.