1234567891011121314151617181920212223242526272829303132333435363738 |
- from datetime import timedelta
- from django.utils import timezone
- from misago.models import Session
- class MembersOnline(object):
- def __init__(self, monitor, frequency=180):
- self.monitor = monitor
- self.frequency = frequency
- self._members = int(monitor['online_members'])
- self._all = int(monitor['online_all'])
- self._om = self._members
- self._oa = self._all
- if monitor.expired('online_all', frequency):
- queryset = Session.objects.filter(matched=True).filter(crawler__isnull=True).filter(last__gte=timezone.now() - timedelta(seconds=frequency))
- self._all = queryset.count()
- self._members = queryset.filter(user__isnull=False).count()
- def new_session(self):
- self._all += 1
- def sign_in(self):
- self._members += 1
- def sign_out(self):
- if self._members:
- self._members -= 1
- def all(self):
- return self._all
- def members(self):
- return self._members
- def sync(self):
- if self._members != self._om:
- self.monitor['online_members'] = self._members
- if self._all != self._oa:
- self.monitor['online_all'] = self._all
|