24 from pyams_utils.interfaces.zeo import IZEOConnection |
24 from pyams_utils.interfaces.zeo import IZEOConnection |
25 from zope.interface.interfaces import ComponentLookupError |
25 from zope.interface.interfaces import ComponentLookupError |
26 |
26 |
27 # import packages |
27 # import packages |
28 from pyams_scheduler.process import SchedulerProcess, SchedulerMessageHandler |
28 from pyams_scheduler.process import SchedulerProcess, SchedulerMessageHandler |
|
29 from pyams_utils.registry import set_local_registry, query_utility |
29 from pyams_utils.zodb import get_connection_from_settings |
30 from pyams_utils.zodb import get_connection_from_settings |
30 from pyams_zmq.process import process_exit_func |
31 from pyams_zmq.process import process_exit_func |
31 from zmq.error import ZMQError |
32 from zmq.error import ZMQError |
32 |
33 |
33 |
34 |
56 application_name = config.registry.settings.get(PYAMS_APPLICATION_SETTINGS_KEY, |
57 application_name = config.registry.settings.get(PYAMS_APPLICATION_SETTINGS_KEY, |
57 PYAMS_APPLICATION_DEFAULT_NAME) |
58 PYAMS_APPLICATION_DEFAULT_NAME) |
58 application = root.get(application_name) |
59 application = root.get(application_name) |
59 if application is not None: |
60 if application is not None: |
60 sm = application.getSiteManager() |
61 sm = application.getSiteManager() |
61 scheduler_util = sm.get(SCHEDULER_NAME) |
62 set_local_registry(sm) |
62 try: |
63 try: |
63 zeo_connection_name = scheduler_util.zeo_connection |
64 scheduler_util = sm.get(SCHEDULER_NAME) |
64 except ComponentLookupError: |
|
65 pass |
|
66 else: |
|
67 zeo_connection = sm.getUtility(IZEOConnection, name=zeo_connection_name) |
|
68 # load tasks |
|
69 for task in scheduler_util.values(): |
|
70 trigger = task.get_trigger(config.registry) |
|
71 logger.debug("Adding scheduler job for task '{0.name}'".format(task)) |
|
72 process.scheduler.add_job(task, trigger, |
|
73 id=str(task.internal_id), |
|
74 name=task.name, |
|
75 kwargs={'zeo_settings': zeo_connection.get_settings(), |
|
76 'registry': config.registry}) |
|
77 logger.debug("Starting tasks scheduler {0!r}".format(process)) |
|
78 # start process |
|
79 try: |
65 try: |
80 process.start() |
66 zeo_connection_name = scheduler_util.zeo_connection |
81 except ZMQError: |
67 except ComponentLookupError: |
|
68 pass |
|
69 else: |
|
70 zeo_connection = query_utility(IZEOConnection, name=zeo_connection_name) |
|
71 if zeo_connection is not None: |
|
72 # load tasks |
|
73 for task in scheduler_util.values(): |
|
74 trigger = task.get_trigger(config.registry) |
|
75 logger.debug("Adding scheduler job for task '{0.name}'".format(task)) |
|
76 process.scheduler.add_job(task, trigger, |
|
77 id=str(task.internal_id), |
|
78 name=task.name, |
|
79 kwargs={'zeo_settings': zeo_connection.get_settings(), |
|
80 'registry': config.registry}) |
|
81 logger.debug("Starting tasks scheduler {0!r}".format(process)) |
|
82 # start process |
|
83 process.start() |
|
84 if process.is_alive(): |
|
85 atexit.register(process_exit_func, process=process) |
|
86 finally: |
|
87 if not process.is_alive(): |
|
88 process.terminate() |
82 process.join() |
89 process.join() |
83 else: |
90 set_local_registry(None) |
84 if process.is_alive(): |
|
85 atexit.register(process_exit_func, process=process) |
|