def __init__(self, name, *p, **k): # base BasicModule.__init__(self, name, *p, **k) # interval self.interval = int(Config().getExt(name, 'interval').strip()) # request-queue self._queueRequest = Queue() # Queue-Manager self._queueManager = QueueManager(\ self.logger, \ Config().get('dir', 'pathFluxd').strip() + "qmgr/", \ Config().get('dir', 'pathTf').strip() + '.transfers/', \ int(Config().getExt(name, 'maxTotalTransfers').strip()), \ int(Config().getExt(name, 'maxTotalDownloadingTransfers').strip()), \ int(Config().getExt(name, 'maxTotalSeedingTransfers').strip()), \ int(Config().getExt(name, 'maxUserTransfers').strip()), \ int(Config().getExt(name, 'maxUserDownloadingTransfers').strip()), \ int(Config().getExt(name, 'maxUserSeedingTransfers').strip())) # request-map self._requestMap = { QueueRequest.TYPE_ADD: self._queueManager.queueAdd, QueueRequest.TYPE_REMOVE: self._queueManager.queueRemove }
class Qmgr(BasicModule): # lock InstanceLock = Lock() # delim DELIM = ';' """ -------------------------------------------------------------------- """ """ __init__ """ """ -------------------------------------------------------------------- """ def __init__(self, name, *p, **k): # base BasicModule.__init__(self, name, *p, **k) # interval self.interval = int(Config().getExt(name, 'interval').strip()) # request-queue self._queueRequest = Queue() # Queue-Manager self._queueManager = QueueManager(\ self.logger, \ Config().get('dir', 'pathFluxd').strip() + "qmgr/", \ Config().get('dir', 'pathTf').strip() + '.transfers/', \ int(Config().getExt(name, 'maxTotalTransfers').strip()), \ int(Config().getExt(name, 'maxTotalDownloadingTransfers').strip()), \ int(Config().getExt(name, 'maxTotalSeedingTransfers').strip()), \ int(Config().getExt(name, 'maxUserTransfers').strip()), \ int(Config().getExt(name, 'maxUserDownloadingTransfers').strip()), \ int(Config().getExt(name, 'maxUserSeedingTransfers').strip())) # request-map self._requestMap = { QueueRequest.TYPE_ADD: self._queueManager.queueAdd, QueueRequest.TYPE_REMOVE: self._queueManager.queueRemove } """ -------------------------------------------------------------------- """ """ status """ """ -------------------------------------------------------------------- """ def status(self): data = {} data['version'] = __version_str__ data['interval'] = self.interval data['maxTotalTransfers'] = self._queueManager.maxTotalTransfers data['maxTotalDownloadingTransfers'] = self._queueManager.maxTotalDownloadingTransfers data['maxTotalSeedingTransfers'] = self._queueManager.maxTotalSeedingTransfers data['maxUserTransfers'] = self._queueManager.maxUserTransfers data['maxUserDownloadingTransfers'] = self._queueManager.maxUserDownloadingTransfers data['maxUserSeedingTransfers'] = self._queueManager.maxUserSeedingTransfers data['queueCount'] = str(self._queueManager.queueCount()) data['queueList'] = self._queueManager.queueList() for sn, sv in self._queueManager.stats.iteritems(): data[sn] = sv return data """ -------------------------------------------------------------------- """ """ command """ """ -------------------------------------------------------------------- """ @synchronized(InstanceLock) def command(self, cmd): # log self.logger.debug('command: %s' % cmd) # stop if cmd == 'stop': if self.running: self.running = False return 'initialize Module-shutdown...' else: return 'Module not running' # queue-count elif cmd == 'count-queue': return self._queueManager.queueCount() # queue-list elif cmd == 'list-queue': return self._queueManager.queueList() # enqueue elif cmd.startswith('enqueue'): cmdAry = cmd.strip().split(Qmgr.DELIM) if len(cmdAry) == 3: # get name and user name = cmdAry[1].strip() user = cmdAry[2].strip() # request-object qRequest = QueueRequest(QueueRequest.TYPE_ADD, QueueEntry(name, user)) # add self._requestAdd(qRequest) # return return 'Added Enqueue-Request: %s/%s' % (name, user) else: return 'Enqueue-Command in wrong format: %s' % cmd # dequeue elif cmd.startswith('dequeue'): cmdAry = cmd.strip().split(Qmgr.DELIM) if len(cmdAry) == 3: # get name and user name = cmdAry[1].strip() user = cmdAry[2].strip() # request-object qRequest = QueueRequest(QueueRequest.TYPE_REMOVE, QueueEntry(name, user)) # add self._requestAdd(qRequest) # return return 'Added Dequeue-Request: %s/%s' % (name, user) else: return 'Dequeue-Command in wrong format: %s' % cmd # reloadConfig elif cmd.startswith('reloadConfig'): # reload settings self.interval = int(Config().getExt(self.name, 'interval').strip()) self._queueManager.maxUserTransfers = int(Config().getExt(self.name, 'maxUserTransfers').strip()) self._queueManager.maxTotalTransfers = int(Config().getExt(self.name, 'maxTotalTransfers').strip()) self._queueManager.maxTotalSeedingTransfers = int(Config().getExt(self.name, 'maxTotalSeedingTransfers').strip()) self._queueManager.maxTotalDownloadingTransfers = int(Config().getExt(self.name, 'maxTotalDownloadingTransfers').strip()) self._queueManager.maxUserDownloadingTransfers = int(Config().getExt(self.name, 'maxUserDownloadingTransfers').strip()) self._queueManager.maxUserSeedingTransfers = int(Config().getExt(self.name, 'maxUserSeedingTransfers').strip()) # message msg = 'Config reloaded (%d %d/%d/%d %d/%d/%d)' % \ ( \ self.interval, \ self._queueManager.maxTotalTransfers, self._queueManager.maxTotalDownloadingTransfers, self._queueManager.maxTotalSeedingTransfers, \ self._queueManager.maxUserTransfers, self._queueManager.maxUserDownloadingTransfers, self._queueManager.maxUserSeedingTransfers\ ) # info self.logger.info(msg) # return return msg # unknown return 'Command unknown: %s' % cmd """ -------------------------------------------------------------------- """ """ getVersion """ """ -------------------------------------------------------------------- """ def getVersion(self): return __version_str__ """ -------------------------------------------------------------------- """ """ onStart """ """ -------------------------------------------------------------------- """ def onStart(self): # debug self.logger.debug('onStart') # start QueueManager self._queueManager.start() """ -------------------------------------------------------------------- """ """ main """ """ -------------------------------------------------------------------- """ def main(self): # counter ctr = self.interval # main-loop while self.running: try: # requestProcess self._requestProcess(1) # process queue if ctr >= self.interval and self.running: # reset counter ctr = 0 # process queue self._processQueue() else: # increase counter ctr += 1 except Exception, e: if self.running: self.logger.error("Exception in Module-Thread (%s)" % (e))