Beispiel #1
0
    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
        }
Beispiel #2
0
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))