11.12.2017, 11:03 | #1 |
Участник
|
Получить данные о бездействие пользователей по sessionId
Есть проблема нужно получить данные о бездействие всех пользователей. Хотим знать сколько клиентов бездействуют и сколько это продолжается по времени.
По логике должно было работать вот так: X++: #TimeConstants sysClientSessions sysClientSessions; AOSSessionInfo aOSSessionInfo; int seconds; ; while select sysClientSessions where sysClientSessions.Status == 1 { aOSSessionInfo = new AOSSessionInfo(sysClientSessions.SessionId); seconds = aOSSessionInfo.idleTicks()/#millisecondsPerSecond; info(strFmt("%1, %2", sysClientSessions.userId, seconds)); } Помогите люди добрые, может есть идеи как решить по-другому эту задачу без нагрузки на систему. |
|
11.12.2017, 12:54 | #2 |
Участник
|
IdleTicks не работает, кажется, с версии 4.0, когда обмен между клиентом и сервером перешел с протокола AOCP на стандартный RPC. Раньше на каждое клиентское подключение была выделенная сессия на AOS, и в рамках этой сессии можно было считать интервалы отсутствия трафика (что воспринималось как бездействие). Теперь со стороны AOS такого уже нет, отслеживать простои можно, наверно, со стороны клиента. См. штатный \Classes\Info\watchDog, который срабатывает при простое 15 минут и более (#watchdogInterval).
|
|
|
За это сообщение автора поблагодарили: demianimp (1), skuull (2). |
12.12.2017, 05:04 | #3 |
Участник
|
Об этом функционале я в курсе!
Только watchDog отрабатывает каждые 15, если последний параметр idle заменить на true то каждые 15 минут простоя. X++: this.setTimeOut(identifierstr(watchDog), #watchdogInterval, false); Может еще кто идейку подкинет? |
|
12.12.2017, 09:56 | #4 |
Участник
|
Может вот эта форма (tutorial_Timer) наведет вас на какие нить мысли.
|
|
12.12.2017, 17:31 | #5 |
Участник
|
Решение во многом может зависеть от того, насколько актуальные данные по бездействию пользователей вам нужны и почему. Если вы хотите вот прям в онлайне видеть, что такие-то сессии бездействуют 4.5 минуты - будет одно решение, если нужно просто собирать статистику и постфактум ее анализировать, скажем, для оптимизации инфраструктуры - будет другое решение. Тут еще важно соблюсти баланс между точностью/актуальностью данных и дополнительной нагрузкой на систему для сбора этих данных. Также я бы сразу закладывал в решение возможность отслеживать бездействие не всех подряд пользователей, а выборочно в зависимости от настроек.
Посмотрите на то, что делает метод watchDog(): он ведь, кроме обновления завершения сессии еще сбрасывает статистику использования объектов приложения. Ваше отслеживание бездействия пользователей можно реализовать аналогично сбору этой статистики:
|
|
|
|