EventManager.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from apscheduler.schedulers.background import BackgroundScheduler
  2. from apscheduler.triggers.cron import CronTrigger
  3. from kalliope.core.ConfigurationManager import BrainLoader
  4. from kalliope.core.SynapseLauncher import SynapseLauncher
  5. from kalliope.core import Utils
  6. from kalliope.core.Models import Event
  7. class EventManager(object):
  8. def __init__(self, synapses):
  9. Utils.print_info('Starting event manager')
  10. self.scheduler = BackgroundScheduler()
  11. self.synapses = synapses
  12. self.load_events()
  13. self.scheduler.start()
  14. def load_events(self):
  15. """
  16. For each received synapse that have an event as signal, we add a new job scheduled
  17. to launch the synapse
  18. :return:
  19. """
  20. for synapse in self.synapses:
  21. for signal in synapse.signals:
  22. # if the signal is an event we add it to the task list
  23. if type(signal) == Event:
  24. my_cron = CronTrigger(year=signal.year,
  25. month=signal.month,
  26. day=signal.day,
  27. week=signal.week,
  28. day_of_week=signal.day_of_week,
  29. hour=signal.hour,
  30. minute=signal.minute,
  31. second=signal.second)
  32. Utils.print_info("Add synapse name \"%s\" to the scheduler: %s" % (synapse.name, my_cron))
  33. self.scheduler.add_job(self.run_synapse_by_name, my_cron, args=[synapse.name])
  34. @staticmethod
  35. def run_synapse_by_name(synapse_name):
  36. """
  37. This method will run the synapse
  38. """
  39. Utils.print_info("Event triggered, running synapse: %s" % synapse_name)
  40. # get a brain
  41. brain_loader = BrainLoader()
  42. brain = brain_loader.brain
  43. SynapseLauncher.start_synapse_by_name(synapse_name, brain=brain)