aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBobby <[email protected]>2023-05-28 13:17:49 -0400
committerBobby <[email protected]>2023-05-28 13:17:49 -0400
commit91dbe94a192f194130bad4a788cdd4828d1d871d (patch)
tree49329e8643080436a2be5be872058a7ee28a3266
parentbddee38e88ffac9ba7129846ef1a9c7e61684bcc (diff)
downloadthatcomputerscientist-91dbe94a192f194130bad4a788cdd4828d1d871d.tar.xz
thatcomputerscientist-91dbe94a192f194130bad4a788cdd4828d1d871d.zip
better Online presence
-rw-r--r--middleware/uuidmiddleware.py47
1 files changed, 22 insertions, 25 deletions
diff --git a/middleware/uuidmiddleware.py b/middleware/uuidmiddleware.py
index c381c8e0..df84a1a4 100644
--- a/middleware/uuidmiddleware.py
+++ b/middleware/uuidmiddleware.py
@@ -27,34 +27,31 @@ def userTrackingContextProcessor(request):
is_authenticated = request.user.is_authenticated
is_staff = request.user.is_staff
- # get a list of anonymous users (retire after 60 seconds)
- anonymous_users = cache.get('anonymous_users', set())
- logged_in_users = cache.get('logged_in_users', set())
- admin_users = cache.get('admin_users', set())
-
- if not is_authenticated:
- anonymous_users.add(user_uuid)
- logged_in_users.discard(user_uuid)
- admin_users.discard(user_uuid)
- elif is_staff and is_authenticated:
- admin_users.add(user_uuid)
- anonymous_users.discard(user_uuid)
- logged_in_users.discard(user_uuid)
- else:
- logged_in_users.add(user_uuid)
- anonymous_users.discard(user_uuid)
- admin_users.discard(user_uuid)
- cache.set('anonymous_users', anonymous_users, 300)
- cache.set('logged_in_users', logged_in_users, 300)
- cache.set('admin_users', admin_users, 300)
-
- anonymous_users = cache.get('anonymous_users', set())
- logged_in_users = cache.get('logged_in_users', set())
- admin_users = cache.get('admin_users', set())
+ # refresh online users every 300 seconds, with auto deleting expired keys
+ cache.set(f"presence_{user_uuid}", {
+ 'is_authenticated': is_authenticated,
+ 'is_staff': is_staff,
+ }, 300)
+
+ # get all online users
+ online_now = cache.keys('presence_*')
+
+ # separate online users into anonymous, logged in, and admin users
+ anonymous_users = []
+ logged_in_users = []
+ admin_users = []
+
+ for user in online_now:
+ user_data = cache.get(user)
+ if user_data['is_authenticated'] == False:
+ anonymous_users.append(user_data)
+ elif user_data['is_authenticated'] == True and user_data['is_staff'] == False:
+ logged_in_users.append(user_data)
+ if user_data['is_staff'] == True:
+ admin_users.append(user_data)
return {
'anonymous_users': len(anonymous_users),
'logged_in_users': len(logged_in_users),
'admin_users': len(admin_users),
}
-