etwist/service.py
branchstable
changeset 5088 891cdb7d8cbb
parent 4719 aaed3f813ef8
child 5365 ca838c79af97
equal deleted inserted replaced
5081:2ea98b8512dd 5088:891cdb7d8cbb
    15 logger.handlers = [handlers.NTEventLogHandler('cubicweb')]
    15 logger.handlers = [handlers.NTEventLogHandler('cubicweb')]
    16 
    16 
    17 os.environ['CW_INSTANCES_DIR'] = r'C:\etc\cubicweb.d'
    17 os.environ['CW_INSTANCES_DIR'] = r'C:\etc\cubicweb.d'
    18 os.environ['USERNAME'] = 'cubicweb'
    18 os.environ['USERNAME'] = 'cubicweb'
    19 
    19 
    20 
       
    21 class CWService(object, win32serviceutil.ServiceFramework):
    20 class CWService(object, win32serviceutil.ServiceFramework):
    22     _svc_name_ = None
    21     _svc_name_ = None
    23     _svc_display_name_ = None
    22     _svc_display_name_ = None
    24     instance = None
    23     instance = None
    25 
    24 
    26     def __init__(self, *args, **kwargs):
    25     def __init__(self, *args, **kwargs):
    27         win32serviceutil.ServiceFramework.__init__(self, *args, **kwargs)
    26         win32serviceutil.ServiceFramework.__init__(self, *args, **kwargs)
    28         self._stop_event = win32event.CreateEvent(None, 0, 0, None)
       
    29         cwcfg.load_cwctl_plugins()
    27         cwcfg.load_cwctl_plugins()
    30         set_log_methods(CubicWebRootResource, logger)
    28         set_log_methods(CubicWebRootResource, logger)
    31         server.parsePOSTData = parsePOSTData
    29         server.parsePOSTData = parsePOSTData
    32 
    30 
    33     def SvcStop(self):
    31     def SvcStop(self):
    34         self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
    32         self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
    35         logger.info('stopping %s service' % self.instance)
    33         logger.info('stopping %s service' % self.instance)
    36         win32event.SetEvent(self._stop_event)
    34         reactor.stop()
    37         self.ReportServiceStatus(win32service.SERVICE_STOPPED)
    35         self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
    38 
    36 
    39     def SvcDoRun(self):
    37     def SvcDoRun(self):
    40         self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
    38         self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
    41         logger = getLogger('cubicweb.twisted')
    39         logger = getLogger('cubicweb.twisted')
    42         logger.info('starting %s service' % self.instance)
    40         logger.info('starting %s service' % self.instance)
    55             self.ReportServiceStatus(win32service.SERVICE_RUNNING)
    53             self.ReportServiceStatus(win32service.SERVICE_RUNNING)
    56             reactor.run()
    54             reactor.run()
    57         except Exception, e:
    55         except Exception, e:
    58             logger.error('service %s stopped (cause: %s)' % (self.instance, e))
    56             logger.error('service %s stopped (cause: %s)' % (self.instance, e))
    59             logger.exception('what happened ...')
    57             logger.exception('what happened ...')
    60             self.SvcStop()
    58         self.ReportServiceStatus(win32service.SERVICE_STOPPED)
    61