app.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from __future__ import absolute_import
  2. import os
  3. import tornado.web
  4. from tornado import ioloop
  5. import celery
  6. from flower.events import Events
  7. from flower.state import State
  8. from flower.urls import handlers
  9. class Flower(tornado.web.Application):
  10. def __init__(self, celery_app=None, events=None, state=None,
  11. io_loop=None, options=None, **kwargs):
  12. kwargs.update(handlers=handlers)
  13. super(Flower, self).__init__(**kwargs)
  14. self.io_loop = io_loop or ioloop.IOLoop.instance()
  15. self.options = options or {}
  16. self.auth = getattr(self.options, 'auth', [])
  17. self.basic_auth = getattr(self.options, 'basic_auth', None)
  18. self.broker_api = getattr(self.options, 'broker_api', None)
  19. self.ssl = None
  20. if options and self.options.certfile and self.options.keyfile:
  21. cwd = os.environ.get('PWD') or os.getcwd()
  22. self.ssl = {
  23. 'certfile': os.path.join(cwd, self.options.certfile),
  24. 'keyfile': os.path.join(cwd, self.options.keyfile),
  25. }
  26. self.celery_app = celery_app or celery.Celery()
  27. db = options.db if options else None
  28. persistent = options.persistent if options else None
  29. max_tasks = options.max_tasks if options else None
  30. self.events = events or Events(celery_app, db=db,
  31. persistent=persistent,
  32. io_loop=self.io_loop,
  33. max_tasks_in_memory=max_tasks)
  34. self.state = State(celery_app, self.broker_api)
  35. def start(self):
  36. self.events.start()
  37. if self.options.inspect:
  38. self.state.start()
  39. self.listen(self.options.port, address=self.options.address,
  40. ssl_options=self.ssl, xheaders=self.options.xheaders)
  41. self.io_loop.start()
  42. def stop(self):
  43. self.events.stop()