monitor.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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, i.type]
  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(
  25. id=key,
  26. value=value,
  27. type=self._items[key][2],
  28. updated=timezone.now()
  29. )
  30. sync_item.save(force_update=True)
  31. return value
  32. def __delitem__(self, key):
  33. pass
  34. def increase(self, key, i=1):
  35. self[key] = int(self[key]) + i
  36. def decrease(self, key, i=1):
  37. self[key] = int(self[key]) - i
  38. def get(self, key, default=None):
  39. if not key in self._items:
  40. return default
  41. return self._items[key][0]
  42. def get_updated(self, key):
  43. if key in self._items:
  44. return self._items[key][1]
  45. return None
  46. def expired(self, key, seconds=5):
  47. return self._items[key][1] < (timezone.now() - timedelta(seconds=seconds))
  48. def has_key(self, key):
  49. return key in self._items
  50. def keys(self):
  51. return self._items.keys()
  52. def values(self):
  53. return self._items.values()
  54. def items(self):
  55. return self._items.items()
  56. def iterkeys(self):
  57. return self._items.iterkeys()
  58. def itervalues(self):
  59. return self._items.itervalues()
  60. def iteritems(self):
  61. return self._items.iteritems()