Решение во многом может зависеть от того, насколько актуальные данные по бездействию пользователей вам нужны и почему. Если вы хотите вот прям в онлайне видеть, что такие-то сессии бездействуют 4.5 минуты - будет одно решение, если нужно просто собирать статистику и постфактум ее анализировать, скажем, для оптимизации инфраструктуры - будет другое решение. Тут еще важно соблюсти баланс между точностью/актуальностью данных и дополнительной нагрузкой на систему для сбора этих данных. Также я бы сразу закладывал в решение возможность отслеживать бездействие не всех подряд пользователей, а выборочно в зависимости от настроек.
Посмотрите на то, что делает метод watchDog(): он ведь, кроме обновления завершения сессии еще сбрасывает статистику использования объектов приложения. Ваше отслеживание бездействия пользователей можно реализовать аналогично сбору этой статистики:
- создать таблицу, куда писать данные в разрезе сессий и интервалов бездействия
- реализовать логику, которая на клиенте будет отслеживать бездействие и периодически писать о нем в созданную таблицу
- реализовать логику, которая, скажем, на той же форме активных пользователей будет дополнительно тянуть данные о бездействии из созданной таблицы обязательно с привязкой к дате-времени входа (чтобы не цеплять исторические данные к новым сессиям с таким же номером сессии, что и в истории)