xboxstat.ru: присутствие (статус)

Продолжаем изучать структуру моей базы пользователей, и сегодня очередь дошла до Rich Presence, не знаю, как лучше перевести на русский. Речь идёт о текущем статусе пользователей Xbox Live, который выглядит в приложении Xbox App следующим образом:

Обратите внимание, под аватаркой геймертаг, а ниже название игры или приложения, а для некоторых игр, типа "CrossfireX" ещё и статус, "in Lobby".<br />
Обратите внимание, под аватаркой геймертаг, а ниже название игры или приложения, а для некоторых игр, типа "CrossfireX" ещё и статус, "in Lobby".

Работа с этим статусом -- это одна из самых сложных, наверное, частей xboxstat.ru. И дело не только в объёме - 2,1 млрд строк не хрен собачий, но и в том, что запрос на статус возвращает текущее значение, но нет способа узнать, какой был статус пять минут назад или вчера, например. Ну, то есть ачивки я могу собрать когда угодно. Статистику, список игр -- вообще без проблем, даже если человек играл пять лет назад. Но вот статусы доступны только пока работает скрипт по их сбору. Скрипт работает -- таблица заполняется. Скрипт не работает, например, из-за профилактики или сбоя - данных нет и взять их будет неоткуда.

Разработчикам игр не рекомендуется обновлять статус чаще, чем раз в 10 секунд, а у меня получается читать их примерно раз в 40-50 секунд. Чтобы было понятно, опрашиваются 313 тысяч геймертагов, и по каждому активному геймертагу выполняется update в таблице. Порядка тысячи апдейдов в секунду. Вполне тянет на процессинг небольшого банка.

Но бог с ним, в базу я как-то данные складываю (спасибо TimescaleDB), но тут вторая задача -- как это наглядно показать. И сегодня я покажу интерфейс доступа к этой таблице, и заодно спрошу совета, как лучше сделать. Призываю посмотреть на себя и поделиться мнением в комментариях. Ещё важное замечание: если выставить в приложении или на консоли статус "Невидимый", вы у меня пропадёте, будете всегда "Offline". Проверьте, чтобы такого не было.

Прямая ссылка на список юзеров:

Ищете свой геймертаг, кликаете, а там есть раздел "Присутствие игрока". Дальше ссылка "подробности", получится как-то так:

Удобный интерфейс? Не, не слышал. Напомню: xboxstat.ru -- это прибор. Из неочевидного, клик на заголовке столбца отсортирует таблицу по этому столбцу.<br />
Удобный интерфейс? Не, не слышал. Напомню: xboxstat.ru -- это прибор. Из неочевидного, клик на заголовке столбца отсортирует таблицу по этому столбцу.

Скрипт по сбору информации был запущен в декабре 2018 года, и сперва его принцип был проще: я собирал и агрегировал информацию в кванты длительностью в один час,это хорошо видно по 2018-2020 году. Начиная с 5 августа 2020 я храню информацию с точностью до секунды, хотя напомню, погрешность составляет 1 минуту. И ещё раз: если вы добавились в базу позавчера, то у меня не будет никаких сведений относительно ваших статусов до этого момента.

Rich Presence возвращает информацию не только об играх, но и о приложениях. Например, TrueAchievements рассказывает, решения к каким ачивкам вы просматриваете в настоящий момент. Фильтр позволяет посмотреть информацию только об играх, а также указать, интересует вас проведённое в тайтлах время или количество разных тайтлов/игр.

При этом надо отметить в целом достаточно пофигистичное отношение разработчиков к корректности данных. Так, для некоторых тайтлов вообще не указано, игра это, или приложение. Ну что ж, бывает и так.

Вторая ценная вещь -- платформа. Я уже писал про новую XboxCoreOS в ежемесячном отчёте за июль, а здесь просто повторю список этих платформ:

PC, WindowsOneCore и Win32 -- это всё пекарни, при этом платформа может меняться в рамках одной сессии. Ещё вопрос: что такое MoLive?<br />
PC, WindowsOneCore и Win32 -- это всё пекарни, при этом платформа может меняться в рамках одной сессии. Ещё вопрос: что такое MoLive?

Запускаемые по обратке тайтлы работают внутри эмулятора XboxOne, поэтому с точки зрения Presence это будет одновременная работа двух игр.

Четвёртый столбец (с геймпадиком) -- это количество различных статусов. Майки не были бы майками, если бы и тут не организовали головняк, хотя скорее тут разрабы что-то не так поняли. В документации приведён отличный пример хорошего статуса: "Хей, пацаны, я бьюсь с драконом в пятом подземелье, на помощь!". Самые отвратительные статусы у спорт-симов и некоторых игр, которые добавляют, сколько, к примеру, очков уже набрано, типа как в Threes. В результате у меня на каком-то адовом pl/perl написана функция, которая нормализует этот рич-презенс отдельно для каждого из почти сотни особо беспощадных тайтлов с целью уменьшить количество мусора в базе. Тем не менее, в каком-то из Far Cry всё равно получилось больше двух сотен статусов. Да дофига таких игр на самом деле.

Надо также помнить, что время, проведённое в игре, считается не так, как в Xbox Live (MinutesPlayed), и может сильно отличаться в любую сторону. Во-первых, скорее всего Xbox Live считает время более правильно, во-вторых, скрипт может в какие-то моменты времени не работать, как это было несколько дней в марте.

Есть ещё два параметра, которые, впрочем, никак не фигурируют в моих таблицах: Placement и State. State может быть Online, Away, InActive и Offline, а Placement бывает Full, Fill, Snapped и Background. Пояснений требует разве что Snapped, устаревший статус для игр/приложений, которые можно было закрепить сбоку от экрана, типа игры Threes!, я пробовал шпилить в неё, одновременно краем глаза смотря ютуб. Работало, но очень на любителя. Майки убрали эту фичу с переходом от интерфейса Windows 8 к операционке Windows 10 в своих консолях.

Я складываю в базу только игры в статусе Online. То есть, если вы отлучились от геймпада, и экран приглушился, в статусе появилось Away, а мой скрипт перестал вас видеть.

Если кликнуть в тайтл, вы получите полный дамп из базы по этой игре. И вот тут-то я никак не могу придумать, что здесь лучше показать. Сейчас это выглядит предельно уныло:

xboxstat.ru: присутствие (статус)

Что можно придумать? График, фильтр, тепловую карту? Ну капец неудобно же пользоваться. Буду рад советам, но и сам продолжу думать.

1515
5 комментариев

Вопрос, который мучает наверняка не только меня — когда уже очередь дойдёт до такой же развёрнутой информации, но уже по играм.

Пацаны, я учусь во фронтэнд. Каждый новый раздел моего xboxstat.ru — это изучение очередных закоулков ECMA и D3, непрерывное расширение горизонтов невежества, плюс периодически приходится исправлять бекенд, так как обнаруживаются разные недочёты или изменения в формате данных от MS.

Когда я пишу очередной раздел, я прямо восхищаюсь своей крутизной, как красиво и изящно я написал код. А спустя месяц я на это говно уже смотреть не могу, потому как многие вещи можно сделать компактнее и проще.

Короче, набью руку на юзер-инфе, приступлю к стате по играм. Заживём!!!

7
Ответить

Привет фонарик... С Лэнда Мастер Хуана 🍻

2
Ответить

Йоу, салют! Ты же вроде в синий лагерь смигрировал? Как оно там? Как ленд вообще? Жив ещё?

2
Ответить