Forked from
DM / dm-docs
261 commits behind, 816 commits ahead of the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
dmModuleManager.py 2.32 KiB
#!/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