В основной системе трекере пользователь создаёт привычки, отмечает прогресс
и постепенно формирует устойчивые привычки. Обычное API приложения работает
с индивидуальными данными пользователя: его привычками, его отметками прогресса
и его текущим состоянием.
Для внутренней аналитики команда хочет вынести отдельный gRPC-сервис.
Он должен считать агрегированные показатели:
процент сформированных привычек пользователя, средний процент по платформе,
место пользователя в рейтинге и общую статистику по всем пользователям.
Такой сервис решает задачи по сбору данных из разных частей системы и возвращению аналитических результатов,
которые нужны для административной панели, продуктовой аналитики или внутренних отчётов.
Методы сервиса
Сервис предоставляет четыре RPC-метода. Каждый метод решает отдельную бизнес-задачу
и показывает, как разные части системы могут использовать аналитические данные.
1. GetUserFormationAnalytics — аналитика по одному пользователю
Метод возвращает аналитику формирования привычек по конкретному пользователю:
количество привычек пользователя, количество сформированных привычек,
процент формирования, средний процент по платформе, сегмент пользователя,
период аналитики и timestamp расчёта.
Сегмент пользователя может принимать значения
NO_FORMED_HABITS, LOW, MEDIUM
или HIGH. По нему можно быстро понять, к какой группе относится
пользователь с точки зрения успешности формирования привычек.
Поле platform_average_formation_rate_percent возвращается
в этом же ответе. Для получения среднего процента по платформе не нужен
отдельный запрос: сервис сразу отдаёт индивидуальный показатель пользователя
и средний показатель платформы, чтобы их можно было сопоставить.
2. CompareUserWithPlatform — сравнение пользователя с платформой
Метод возвращает процент формирования привычек пользователя, средний процент
по платформе, разницу между ними, место пользователя в рейтинге и общее
количество участников рейтинга.
Поле difference_from_platform_average_percent может быть
положительным, отрицательным или равным нулю. Если пользователь выше среднего
значения по платформе — разница будет положительной. Если ниже среднего —
отрицательной. Если показатели совпадают — нулевой.
Рейтинг считается только за выбранный период, который передаётся в поле
period. Поэтому один и тот же пользователь может иметь разные
позиции в рейтинге за последние 7 дней, 30 дней, 90 дней или за всё время.
3. ListTopUsersByFormationRate — рейтинг пользователей
Метод возвращает рейтинг пользователей по проценту сформированных привычек.
В ответе приходит список элементов рейтинга: ID пользователя, количество
сформированных привычек, общее количество привычек, процент формирования
и место в рейтинге.
Так как пользователей может быть много, в ответе используется список
repeated и токен следующей страницы next_page_token.
По нему клиент может запросить следующую страницу рейтинга.
Также в ответе есть время расчёта. Это важно для аналитики, потому что рейтинг
может строиться не в реальном времени, а после пересчёта данных.
4. WatchPlatformAnalytics — поток обновлений платформы
Метод возвращает поток событий. Это значит, что сервер может отправить
одно или несколько сообщений PlatformAnalyticsUpdatedEvent
в рамках одного соединения.
В событии передаётся общая статистика платформы: количество пользователей,
общее количество привычек, количество сформированных привычек, средний процент
формирования по платформе и timestamp события.
Запрос может содержать optional-поле segment. Если оно не передано,
клиент подписывается на обновления по всем сегментам. Если сегмент указан,
сервер должен отправлять только события по конкретному сегменту пользователей.