def getServerDependencyMap(plugin,serverName): factory = ServerNetworkFactory(plugin.mainDaemon) serversNetwork=factory.buildNetwork(plugin.mainDaemon.ETC_DIR) returnValue = {} returnValue['available'] = {} returnValue['disabled'] = {} returnValue['existing'] = {} for possibleServer in serversNetwork.getSortedNodeListIndex(): if possibleServer != serverName: returnValue['available'][possibleServer] = iniToDict(os.path.join(plugin.mainDaemon.SERVERS_DIR,possibleServer + ".ini"))["server"]["comment"] try: serversNetwork.addDependency(serverName, possibleServer) #if all went well, remove dependency try: serversNetwork.removeDependency( possibleServer,serverName ) except ValueError: pass except DependencyException as e: returnValue['available'].pop(possibleServer) returnValue['disabled'][possibleServer] = e.list except AdditionError: #Happens if dependency already exists returnValue['existing'][possibleServer] = returnValue['available'].pop(possibleServer) return returnValue
def __init__(self): self.ETC_DIR = ETC_DIR OUTLET_DIR = config.get('main', 'OUTLET_DIR') self.OUTLETS_DIR = os.path.join(ETC_DIR,OUTLET_DIR) TESTER_DIR = config.get('main', 'TESTER_DIR') self.TESTERS_DIR = os.path.join(ETC_DIR,TESTER_DIR) CONTROLLER_DIR = config.get('main', 'CONTROLLER_DIR') self.CONTROLLERS_DIR = os.path.join(ETC_DIR,CONTROLLER_DIR) SERVER_DIR = config.get('main', 'SERVER_DIR') self.SERVERS_DIR = os.path.join(ETC_DIR,SERVER_DIR) def makeSureDirExists(path): if not os.path.isdir(path): os.mkdir(path) return makeSureDirExists(self.OUTLETS_DIR) makeSureDirExists(self.CONTROLLERS_DIR) makeSureDirExists(self.TESTERS_DIR) makeSureDirExists(self.SERVERS_DIR) #config framework self.config = config #get it from the global #Handle the serverTree #Daemon.__init__(self, pidfile, stdin, stdout, stderr) factory = ServerNetworkFactory(self) self.servers=factory.buildNetwork(ETC_DIR) #self.servers.allOff() #servers.initiateStartup() #Communication handling system self.communicationHandler =CommunicationHandler(self) self.communicationHandler.AddCommandToList("getAvailablePluginsList", lambda dataDict: self.getAvailablePluginsListIndex(dataDict)) self.communicationHandler.AddCommandToList("getAvailablePDUsList", lambda dataDict: {"PDUs" : json.dumps(factory.getOutletsDictIndex())}) self.communicationHandler.AddCommandToList("getAvailableTestersList", lambda dataDict: {"Testers" : json.dumps(factory.getTestersDictIndex())}) self.communicationHandler.AddCommandToList("getAvailableControllersList", lambda dataDict: {"Controllers" : json.dumps(factory.getControllersDictIndex())}) self.communicationHandler.AddCommandToList("restart", lambda dataDict: self.reload(dataDict)) self.running= True #plugin init self.plugins = [] plugins = self.getPluginList() for plugin in plugins: if plugin.__name__ in pluginList: #self.debug("Loaded: " + plugin.__name__) self.plugins.append(plugin(self)) #plugin run for plugin in self.plugins: plugin.start() #main loop try: while self.running: #self.debug("In main loop") time.sleep(10) except KeyboardInterrupt: self.debug("Got KeyboardInterrupt, exiting") self.shutdown() return