#!/usr/bin/env python # # Module manager class. # ####################################################################### import threading ####################################################################### class DmModuleManager: """ Singleton class used for managing dm modules. """ # Get singleton instance. @classmethod def getInstance(cls): from dm.common.utility.dmModuleManager import DmModuleManager try: mgr = DmModuleManager() except DmModuleManager, ex: mgr = ex return mgr # Singleton. __instanceLock = threading.RLock() __instance = None def __init__(self): DmModuleManager.__instanceLock.acquire() try: if DmModuleManager.__instance: raise DmModuleManager.__instance DmModuleManager.__instance = self from dm.common.utility.loggingManager import LoggingManager self.logger = LoggingManager.getInstance().getLogger(self.__class__.__name__) self.lock = threading.RLock() self.moduleList = [] self.modulesRunning = False finally: DmModuleManager.__instanceLock.release() def addModule(self, m): self.lock.acquire() try: self.logger.debug('Adding dm module: %s' % m.__class__.__name__) self.moduleList.append(m) finally: self.lock.release() def startModules(self): self.lock.acquire() try: if self.modulesRunning: return for m in self.moduleList: self.logger.debug('Starting dm module: %s' % m.__class__.__name__) m.start() self.modulesRunning = True finally: self.lock.release() def stopModules(self): self.lock.acquire() try: if not self.modulesRunning: return n = len(self.moduleList) for i in range(0, n): m = self.moduleList[n-1-i] self.logger.debug('Stopping dm module: %s' % m.__class__.__name__) m.stop() self.modulesRunning = False finally: self.lock.release() ####################################################################### # Testing. if __name__ == '__main__': pass