Метрики
src/metrics/ — копії статистики й online TU в ClickHouse і метрики на них: графіки TU і команди, скоринг TU, пари TU з RU.
Дані: таблиці ClickHouse · Swagger: тег Metrics · План: MetricsService, Metrics Sync Worker
Що робить модуль
- Тримає в ClickHouse копію
project_statisticsз денними парами TU + RU і денний online TU; online RU пише знімок на партнері (Online на партнері). - Рахує метрики TU і команди за днями, тижнями, місяцями в межах ролі; межі ролі — relations і журнали Stack, як у дашбордах.
- Віддає календар RU по TU за 14 днів і деталі пари за день.
Копії в ClickHouse
Статистика
Дні замінюються цілком: по місяцю видаляються дні з обох таблиць, операції з Mongo вставляються пачками по 50 тис., денні пари будує сам ClickHouse з щойно вставлених операцій. Пари беруть лише операції агенції з RU, без службових типів і подарунків, і діляться за оператором і тімлідом дня.
Дні для копіювання визначає звірка відбитків, а не тригер: кількість рядків і останній createdAt кожного дня в Mongo й у копії. Рядки статистики лише вставляються й видаляються, тож будь-яка зміна дня змінює відбиток. Копія підхоплює пізні дані: історію нової адмін панелі з 2022 року, зовнішню історію нової TU, видалені дні, недокопійований місяць.
Online TU
Відрізки online TU діляться межами діб проєкту, тривалості TU за добу сумуються. Копіюються дні, що закінчились, від передостаннього скопійованого до вчора — так підхоплюється пізній синк Electron за вчора. Дні замінюються цілком по місяцю.
Коли
| Коли | Що |
|---|---|
| Після оновлення relations (05-statistics) | звірка статистики і копія online TU у фоні; збій лише логується, наступна звірка виправляє |
| Вручну, вкладка міграцій | звірка або примусова копія днів from..to |
Один запуск на проєкт: Redis-лок, паралельний — 409.
Метрики
Конект — пара TU + RU за день з будь-якою операцією, крім службових і подарунків; платний — з додатною сумою. Вік пари — днів від першого платного дня: new — 0, young — 1–7, old — 8+. Вік і повернення рахуються на читанні.
| Метрика | Визначення |
|---|---|
balance | сума додатних операцій |
avgBalancePerDay, avgDau | баланс і конекти на активний день |
avgOnline | хвилин online на активний день; null до початку обліку online проєкту (Golden — 2025-10-16) |
avgSpent | середня сума платного конекту за віком |
retention | % пар з конектом і наступного дня від конектів попереднього дня за віком |
tau, newConn | різні пари за період; пари з днем знайомства в періоді |
cpr (TU) | дні з конектом / дні можливої активності пари: від першого дня пари в періоді, якщо це день знайомства, інакше весь період |
avgViews (TU) | переглядів профілю (RU + година) на годину online, для TU з online понад годину |
onTimeReplyRate, newConnRate | % чат-задач з відповіддю до таймера; % RU з інвайтів, що відповіли |
TU
TU ролі — з relations, кожна зі своїми активними днями в межах ролі. Пул точки — TU з активним днем у періоді й online від години (до обліку online — без відсіву). Online — project_tu_online_days лише за активні дні. ClickHouse рахує суми по TU і періоду, пул сумується в сервісі: метрики пар адитивні по TU.
Команда
Операції з прив’язкою до операторів у дні, коли вони були в межах ролі (TeamPeriodsService, спільний зі статистикою і дашбордами). Активний день — день оператора в ролі, online — оператора. Пара за день рахується для кожного оператора окремо.
Пари TU з RU
14 днів до day, RU, які за цей час платили TU. Статус дня за пріоритетом: блок TU, витрати на TU, на інші TU, online без витрат, не заходив. Незавершені дні — з project_statistics_temp на читанні. У деталях пари інші TU director бачить усі, топ — TU своїх тімлідів у цей день, решта — жодних.
Тимчасово з legacy Golden
Інвайти (golden_sender_answers), перегляди профілю (golden_profile_views), блоки (golden_block_list_history) — legacy ClickHouse main; задачі — Mongo golden_action_operators (LegacyMetricsRepository, TU за партнерським ID). Інші проєкти цих даних не мають — метрики 0.
API для frontend
Графіки приймають project, from, to, groupBy: day | week | month; скоринг — без groupBy. Дні від сьогодні не рахуються, межі точок повні (тиждень пн–нд, місяць).
| Роут | Ролі | Поля |
|---|---|---|
POST /v2/metrics/tus/director | director | teamLeadProjectId?, operatorProjectId?, tuId? |
POST /v2/metrics/tus/team-lead | тімлід, director | teamLeadProjectId, operatorProjectId?, tuId? |
POST /v2/metrics/tus/operator | operator, director | operatorProjectId, tuId? |
POST /v2/metrics/tus/top-manager | top manager, director | teamLeadProjectId?, operatorProjectId?, topManagerUserId?, tuId? |
POST /v2/metrics/scoring/{director,team-lead,operator,top-manager} | як вище | ті самі без tuId |
POST /v2/metrics/team/director | director | хоча б одне: topManagerUserId, teamLeadProjectId, operatorProjectId |
POST /v2/metrics/team/{team-lead,operator,top-manager} | як у TU | як у TU, без tuId |
POST /v2/metrics/connections | director, top manager, тімлід, operator | tuId, day, stage? |
POST /v2/metrics/connection-details | ті самі | tuId, ruId, day |
Один роут графіка повертає точки з усіма метриками (legacy — 12 роутів і /all).
Internal API
| Роут | Хто викликає | Навіщо |
|---|---|---|
POST /v2/internal/metrics/sync-statistics | вручну, вкладка міграцій | без дат — звірка (на порожній копії — уся історія); з датами — дні from..to примусово |
POST /v2/internal/metrics/sync-tu-online | вручну, вкладка міграцій | без дат — від передостаннього дня (на порожній таблиці — уся історія); з датами — дні from..to |
Відмінності від legacy
- Вік пари й повернення рахуються на читанні: пізні дані їх не ламають. Legacy зберігав їх у рядку на момент запису.
- Активні дні TU — з relations. Legacy вважав TU без логів активною весь період, тож мав більше днів:
avgOnline,avgBalancePerDay,avgDauтут нижчі. - Оператори команди — з relations ролі; legacy брав усіх поточних операторів тімліда, зокрема заблокованих без логів.
- TAU і нові конекти команди — різні пари за період; legacy сумував денні значення по операторах.
avgDaulegacy/allділив на TAU замість суми денних конектів — тут як окремий legacy/avg-dau. avgSpentокруглюється, legacy обрізав: різниця 0,01.
Звірка з legacy (дамп ClickHouse 01.10.2026, Mongo до 27.09)
- Пари за день проти
golden_general_metric_data: 05.2026 — 17 336, 09.2026 — 15 290 спільних пар-днів, 0 розбіжностей; 08.2026 — 17 172 спільні, 0 розбіжностей, і 1 013 лише в нас — 54 TU адмін панелі, доданої 30.08, історію яких legacy не долив. - Графік TU director, 08–09.2026:
balance,retention,tau,newConn,cpr, задачі й інвайти збігаються,avgSpentіavgViews— ±0,01; різняться лише метрики на активний день. Скоринг 08.2026: 451 спільна TU, баланс кожної збігається. - Команда: оператор — усе, крім TAU; тімлід і топ — сума ±0,5 % у місяцях переходів операторів між командами.
- Пари TU з RU: календарі 4 TU за три дні з фільтром віку — статуси й суми збігаються, крім днів з недолитою в legacy історією; деталі 12 пар — 1:1.
- Копія статистики: кількість і сума по всіх 57 місяцях збігаються з Mongo. Online TU за 08.2026 збігається з відрізками Mongo до округлення секунд.
- Швидкість: місяць director — 1 с (legacy 20 с), 9 місяців по тижнях — 4,7 с, з них ~3 с — задачі з legacy Mongo; команда — 0,2–0,5 с.
Борг
- Межі ролі беруться з тіла запиту без перевірки власника, як у legacy і в дашбордах.
- Інвайти, перегляди, блоки і задачі читаються з legacy Golden — до переробки інвайтів і задач.