|
@@ -1,9 +1,11 @@
|
|
from datetime import timedelta
|
|
from datetime import timedelta
|
|
|
|
+from django.core.cache import cache
|
|
from django.utils import timezone
|
|
from django.utils import timezone
|
|
from misago.models import Session
|
|
from misago.models import Session
|
|
|
|
|
|
class MembersOnline(object):
|
|
class MembersOnline(object):
|
|
def __init__(self, monitor, frequency=180):
|
|
def __init__(self, monitor, frequency=180):
|
|
|
|
+ self.recounted = False
|
|
self.monitor = monitor
|
|
self.monitor = monitor
|
|
self.frequency = frequency
|
|
self.frequency = frequency
|
|
self._members = int(monitor['online_members'])
|
|
self._members = int(monitor['online_members'])
|
|
@@ -13,11 +15,15 @@ class MembersOnline(object):
|
|
if (monitor.expired('online_all', frequency) or
|
|
if (monitor.expired('online_all', frequency) or
|
|
monitor.expired('online_members', frequency)):
|
|
monitor.expired('online_members', frequency)):
|
|
self.count_sessions()
|
|
self.count_sessions()
|
|
|
|
+ self.recounted = False
|
|
|
|
|
|
def count_sessions(self):
|
|
def count_sessions(self):
|
|
- queryset = Session.objects.filter(matched=True).filter(crawler__isnull=True).filter(last__gte=timezone.now() - timedelta(seconds=self.frequency))
|
|
|
|
- self._all = queryset.count()
|
|
|
|
- self._members = queryset.filter(user__isnull=False).count()
|
|
|
|
|
|
+ if not self.recounted:
|
|
|
|
+ self.recounted = True
|
|
|
|
+ queryset = Session.objects.filter(matched=True).filter(crawler__isnull=True).filter(last__gte=timezone.now() - timedelta(seconds=self.frequency))
|
|
|
|
+ self._all = queryset.count()
|
|
|
|
+ self._members = queryset.filter(user__isnull=False).count()
|
|
|
|
+ cache.delete_many(['team_users_online', 'ranks_online'])
|
|
|
|
|
|
def new_session(self):
|
|
def new_session(self):
|
|
self._all += 1
|
|
self._all += 1
|
|
@@ -39,4 +45,10 @@ class MembersOnline(object):
|
|
if self._members != self._om:
|
|
if self._members != self._om:
|
|
self.monitor['online_members'] = self._members
|
|
self.monitor['online_members'] = self._members
|
|
if self._all != self._oa:
|
|
if self._all != self._oa:
|
|
- self.monitor['online_all'] = self._all
|
|
|
|
|
|
+ self.monitor['online_all'] = self._all
|
|
|
|
+
|
|
|
|
+ def stats(self):
|
|
|
|
+ return {
|
|
|
|
+ 'members': self.members(),
|
|
|
|
+ 'all': self.all(),
|
|
|
|
+ }
|