onlines.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. from datetime import timedelta
  2. from django.utils import timezone
  3. from misago.models import Session
  4. class MembersOnline(object):
  5. def __init__(self, monitor, frequency=180):
  6. self.monitor = monitor
  7. self.frequency = frequency
  8. self._members = int(monitor['online_members'])
  9. self._all = int(monitor['online_all'])
  10. self._om = self._members
  11. self._oa = self._all
  12. if monitor.expired('online_all', frequency):
  13. queryset = Session.objects.filter(matched=True).filter(crawler__isnull=True).filter(last__gte=timezone.now() - timedelta(seconds=frequency))
  14. self._all = queryset.count()
  15. self._members = queryset.filter(user__isnull=False).count()
  16. def new_session(self):
  17. self._all += 1
  18. def sign_in(self):
  19. self._members += 1
  20. def sign_out(self):
  21. if self._members:
  22. self._members -= 1
  23. def all(self):
  24. return self._all
  25. def members(self):
  26. return self._members
  27. def sync(self):
  28. if self._members != self._om:
  29. self.monitor['online_members'] = self._members
  30. if self._all != self._oa:
  31. self.monitor['online_all'] = self._all