src/pyams_scheduler/include.py
changeset 16 0a23439ac705
parent 13 1ef4d38681e8
child 17 643ce60ce5f7
equal deleted inserted replaced
15:d035041ef482 16:0a23439ac705
    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)