monitor.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. from datetime import timedelta
  2. from django.core.cache import cache
  3. from django.utils import timezone
  4. from misago.models import MonitorItem
  5. class Monitor(object):
  6. def __init__(self):
  7. self._cache_deleted = False
  8. self._items = {}
  9. self.refresh()
  10. def refresh(self):
  11. self._items = cache.get('monitor')
  12. if not self._items:
  13. self._items = {}
  14. for i in MonitorItem.objects.all():
  15. self._items[i.id] = [i.value, i.updated]
  16. cache.set('monitor', self._items)
  17. def __contains__(self, key):
  18. return key in self._items
  19. def __getitem__(self, key):
  20. return self._items[key][0]
  21. def __setitem__(self, key, value):
  22. self._items[key][0] = value
  23. cache.set('monitor', self._items)
  24. sync_item = MonitorItem(id=key, value=value, updated=timezone.now())
  25. sync_item.save(force_update=True)
  26. return value
  27. def __delitem__(self, key):
  28. pass
  29. def get(self, key, default=None):
  30. if not key in self._items:
  31. return default
  32. return self._items[key][0]
  33. def get_updated(self, key):
  34. if key in self._items:
  35. return self._items[key][1]
  36. return None
  37. def expired(self, key, seconds=5):
  38. return self._items[key][1] < (timezone.now() - timedelta(seconds=seconds))
  39. def has_key(self, key):
  40. return key in self._items
  41. def keys(self):
  42. return self._items.keys()
  43. def values(self):
  44. return self._items.values()
  45. def items(self):
  46. return self._items.items()
  47. def iterkeys(self):
  48. return self._items.iterkeys()
  49. def itervalues(self):
  50. return self._items.itervalues()
  51. def iteritems(self):
  52. return self._items.iteritems()