src/pyams_scheduler/include.py
changeset 17 643ce60ce5f7
parent 16 0a23439ac705
child 21 8b3250991530
equal deleted inserted replaced
16:0a23439ac705 17:643ce60ce5f7
    16 # import standard library
    16 # import standard library
    17 import atexit
    17 import atexit
    18 import logging
    18 import logging
    19 logger = logging.getLogger('PyAMS (scheduler')
    19 logger = logging.getLogger('PyAMS (scheduler')
    20 
    20 
       
    21 import sys
       
    22 
    21 # import interfaces
    23 # import interfaces
    22 from pyams_scheduler.interfaces import SCHEDULER_HANDLER_KEY, SCHEDULER_NAME
    24 from pyams_scheduler.interfaces import SCHEDULER_HANDLER_KEY, SCHEDULER_NAME
    23 from pyams_utils.interfaces import PYAMS_APPLICATION_SETTINGS_KEY, PYAMS_APPLICATION_DEFAULT_NAME
    25 from pyams_utils.interfaces import PYAMS_APPLICATION_SETTINGS_KEY, PYAMS_APPLICATION_DEFAULT_NAME
    24 from pyams_utils.interfaces.zeo import IZEOConnection
    26 from pyams_utils.interfaces.zeo import IZEOConnection
    25 from zope.interface.interfaces import ComponentLookupError
    27 from zope.interface.interfaces import ComponentLookupError
    27 # import packages
    29 # import packages
    28 from pyams_scheduler.process import SchedulerProcess, SchedulerMessageHandler
    30 from pyams_scheduler.process import SchedulerProcess, SchedulerMessageHandler
    29 from pyams_utils.registry import set_local_registry, query_utility
    31 from pyams_utils.registry import set_local_registry, query_utility
    30 from pyams_utils.zodb import get_connection_from_settings
    32 from pyams_utils.zodb import get_connection_from_settings
    31 from pyams_zmq.process import process_exit_func
    33 from pyams_zmq.process import process_exit_func
    32 from zmq.error import ZMQError
       
    33 
    34 
    34 
    35 
    35 def include_package(config):
    36 def include_package(config):
    36     """Pyramid package include"""
    37     """Pyramid package include"""
    37 
    38 
    44     except ImportError:
    45     except ImportError:
    45         config.scan(ignore='pyams_scheduler.zmi')
    46         config.scan(ignore='pyams_scheduler.zmi')
    46     else:
    47     else:
    47         config.scan()
    48         config.scan()
    48 
    49 
    49     start_handler = config.registry.settings.get(SCHEDULER_HANDLER_KEY, False)
    50     # Check for upgrade mode
       
    51     if sys.argv[0].endswith('pyams_upgrade'):
       
    52         return
       
    53 
       
    54     settings = config.registry.settings
       
    55     start_handler = settings.get(SCHEDULER_HANDLER_KEY, False)
    50     if start_handler:
    56     if start_handler:
    51         # create scheduler process
       
    52         process = SchedulerProcess(start_handler, SchedulerMessageHandler, config.registry)
       
    53         # get database connection
    57         # get database connection
    54         connection = get_connection_from_settings(config.registry.settings)
    58         connection = get_connection_from_settings(settings)
    55         root = connection.root()
    59         root = connection.root()
    56         # get application
    60         # get application
    57         application_name = config.registry.settings.get(PYAMS_APPLICATION_SETTINGS_KEY,
    61         application_name = settings.get(PYAMS_APPLICATION_SETTINGS_KEY, PYAMS_APPLICATION_DEFAULT_NAME)
    58                                                         PYAMS_APPLICATION_DEFAULT_NAME)
       
    59         application = root.get(application_name)
    62         application = root.get(application_name)
    60         if application is not None:
    63         if application is not None:
    61             sm = application.getSiteManager()
    64             sm = application.getSiteManager()
    62             set_local_registry(sm)
    65             set_local_registry(sm)
    63             try:
    66             try:
    67                 except ComponentLookupError:
    70                 except ComponentLookupError:
    68                     pass
    71                     pass
    69                 else:
    72                 else:
    70                     zeo_connection = query_utility(IZEOConnection, name=zeo_connection_name)
    73                     zeo_connection = query_utility(IZEOConnection, name=zeo_connection_name)
    71                     if zeo_connection is not None:
    74                     if zeo_connection is not None:
       
    75                         # create scheduler process
       
    76                         process = SchedulerProcess(start_handler, SchedulerMessageHandler, config.registry)
    72                         # load tasks
    77                         # load tasks
    73                         for task in scheduler_util.values():
    78                         for task in scheduler_util.values():
    74                             trigger = task.get_trigger(config.registry)
    79                             trigger = task.get_trigger(config.registry)
    75                             logger.debug("Adding scheduler job for task '{0.name}'".format(task))
    80                             logger.debug("Adding scheduler job for task '{0.name}'".format(task))
    76                             process.scheduler.add_job(task, trigger,
    81                             process.scheduler.add_job(task, trigger,
    77                                                       id=str(task.internal_id),
    82                                                       id=str(task.internal_id),
    78                                                       name=task.name,
    83                                                       name=task.name,
    79                                                       kwargs={'zeo_settings': zeo_connection.get_settings(),
    84                                                       kwargs={'zeo_settings': zeo_connection.get_settings(),
    80                                                               'registry': config.registry})
    85                                                               'registry': config.registry})
    81                         logger.debug("Starting tasks scheduler {0!r}".format(process))
       
    82                         # start process
    86                         # start process
       
    87                         logger.debug("Starting tasks scheduler {0!r}...".format(process))
    83                         process.start()
    88                         process.start()
    84                         if process.is_alive():
    89                         if process.is_alive():
    85                             atexit.register(process_exit_func, process=process)
    90                             atexit.register(process_exit_func, process=process)
    86             finally:
    91             finally:
    87                 if not process.is_alive():
    92                 if not process.is_alive():