Advertisement
Guest User

Untitled

a guest
Jul 16th, 2019
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.91 KB | None | 0 0
  1. import logging
  2. import threading
  3.  
  4. from kazoo.client import KazooClient
  5. from kazoo.recipe.cache import TreeCache, TreeEvent
  6.  
  7.  
  8. class TreeCacheListener(object):
  9.  
  10. CONNECTIVE_EVENTS = {
  11. TreeEvent.CONNECTION_SUSPENDED: 'SUSPENDED',
  12. TreeEvent.CONNECTION_RECONNECTED: 'RECONNECTED',
  13. TreeEvent.CONNECTION_LOST: 'LOST',
  14. }
  15.  
  16. def __init__(self, tree_cache):
  17. self._log = logging.getLogger('{0}.{1}'.format(
  18. __name__, self.__class__.__name__))
  19. self._cache = tree_cache
  20. self._initialized = threading.Event()
  21.  
  22. def start(self, timeout=5):
  23. self._cache.listen(self._handle_event)
  24. self._cache.listen_fault(self._handle_fault)
  25. self._cache.start()
  26. return self._initialized.wait(timeout)
  27.  
  28. def _handle_event(self, event):
  29. if not self._initialized.is_set():
  30. if event.event_type == TreeEvent.INITIALIZED:
  31. self._initialized.set()
  32. return
  33.  
  34. if event.event_type in self.CONNECTIVE_EVENTS:
  35. event_name = self.CONNECTIVE_EVENTS[event.event_type]
  36. self._log.info('Connective event %s happened', event_name)
  37. return
  38.  
  39. if event.event_type in (
  40. TreeEvent.NODE_ADDED,
  41. TreeEvent.NODE_UPDATED,
  42. TreeEvent.NODE_REMOVED):
  43. # NOTE We are able to do something on the tree cache now
  44. return
  45.  
  46. def _handle_fault(self, error):
  47. self._log.exception(error)
  48.  
  49.  
  50. def example():
  51. client = KazooClient()
  52. client.start()
  53. tree_cache = TreeCache(client, '/kazoo-treecache-example')
  54. tree_listener = TreeCacheListener(tree_cache)
  55. tree_listener.start() # block until the tree cache is initialized
  56. path, data, stat = tree_cache.get_data('/kazoo-treecache-example')
  57. print('\n=> {0} = {1!r}; {2}'.format(path, data, stat))
  58.  
  59.  
  60. if __name__ == '__main__':
  61. logging.basicConfig(level=logging.DEBUG)
  62. example()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement