Last online calculates only on the last 10 minutes
Онлайн считается на основе последних интервалов, которые, в свою очередь, считаются вот так:
app/core/service/timeline.js:169
    loadLatestIntervals(userIDs, projectIDs) {
        const endAt = moment();
        const startAt = endAt.clone().subtract(10, 'minutes');
        return this.timeIntervalService
            .getDashboardIntervals(userIDs, projectIDs, startAt, endAt)
Что приводит нас к такой ситуации:
- У человека задан период скриншотов в 10 минут.
 - Скрины делаются каждые 10 минут и он появляется в онлайне только на момент скрина и через минуту-другую пропадает и невозможно понять: остановил он трекер или еще нет.
 
Решение
Бэкенд
- Добавить для пользователя поле 
last_activity. Оно будет содержать время когда последний раз юзер отправил heartbeat. - Добавить в 
.envкоэффициент неактивности пользователей и времяheartbeatзапросов 
Фронт
- Определяем онлайн пользователь или нет по полю 
last_activity, модифицируем все аватарки в системе, чтобы они отображали текущее состояние пользователя 
Клиент
- Если пользователь имеет 
last_activity< (Коэффициент) * n (время heartbeat), то не даем ему стартовать трекинг для избежания трекинга в двух клиентах - Раз в n времени отправляется heartbeat запрос на бэк, потверждающий онлайн клиента
 
Edited  by Alex Vyarvelsky