Показать сообщение отдельно
Старый 12.12.2017, 17:31   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Решение во многом может зависеть от того, насколько актуальные данные по бездействию пользователей вам нужны и почему. Если вы хотите вот прям в онлайне видеть, что такие-то сессии бездействуют 4.5 минуты - будет одно решение, если нужно просто собирать статистику и постфактум ее анализировать, скажем, для оптимизации инфраструктуры - будет другое решение. Тут еще важно соблюсти баланс между точностью/актуальностью данных и дополнительной нагрузкой на систему для сбора этих данных. Также я бы сразу закладывал в решение возможность отслеживать бездействие не всех подряд пользователей, а выборочно в зависимости от настроек.
Посмотрите на то, что делает метод watchDog(): он ведь, кроме обновления завершения сессии еще сбрасывает статистику использования объектов приложения. Ваше отслеживание бездействия пользователей можно реализовать аналогично сбору этой статистики:
  • создать таблицу, куда писать данные в разрезе сессий и интервалов бездействия
  • реализовать логику, которая на клиенте будет отслеживать бездействие и периодически писать о нем в созданную таблицу
  • реализовать логику, которая, скажем, на той же форме активных пользователей будет дополнительно тянуть данные о бездействии из созданной таблицы обязательно с привязкой к дате-времени входа (чтобы не цеплять исторические данные к новым сессиям с таким же номером сессии, что и в истории)