event_processor.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import json
  4. import time
  5. from models import Database as db
  6. from models import Guest
  7. from models import Log
  8. from models import Utils
  9. from models import EmitKind
  10. from models.initialize import app, logger
  11. __author__ = 'James Iter'
  12. __date__ = '2017/4/15'
  13. __contact__ = 'james.iter.cn@gmail.com'
  14. __copyright__ = '(c) 2017 by James Iter.'
  15. class EventProcessor(object):
  16. message = None
  17. log = Log()
  18. guest = Guest()
  19. @classmethod
  20. def log_processor(cls):
  21. cls.log.set(type=cls.message['type'], timestamp=cls.message['timestamp'], host=cls.message['host'],
  22. message=cls.message['message'])
  23. cls.log.create()
  24. @classmethod
  25. def event_processor(cls):
  26. cls.guest.uuid = cls.message['message']['uuid']
  27. cls.guest.get_by('uuid')
  28. cls.guest.status = cls.message['type']
  29. cls.guest.on_host = cls.message['host']
  30. cls.guest.update()
  31. @classmethod
  32. def launch(cls):
  33. while True:
  34. if Utils.exit_flag:
  35. Utils.thread_counter -= 1
  36. print 'Thread EventProcessor say bye-bye'
  37. return
  38. try:
  39. host_log = db.r.lpop(app.config['upstream_queue'])
  40. if host_log is None:
  41. time.sleep(1)
  42. continue
  43. cls.message = json.loads(host_log)
  44. if cls.message['kind'] == EmitKind.log.value:
  45. cls.log_processor()
  46. elif cls.message['kind'] == EmitKind.event.value:
  47. cls.event_processor()
  48. else:
  49. pass
  50. except Exception as e:
  51. logger.error(e.message)