monitor.py 2.2 KB

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