예제 #1
0
    def setup(self, config):

        # Listen for HTTP connections
        port = 6280
        iface = None

        if config is not None:
            if 'port' in config:
                port = int(config['port'])
            if 'interface' in config:
                iface = config['interface']

        if iface is None:
            iface = '0.0.0.0'

        templateLoader = PackageLoader('downpour.web', 'templates')
        self.templateFactory = Environment(loader=templateLoader)
        templateDir = os.path.dirname(templateLoader.get_source(
                self.templateFactory, 'base.html')[1]);

        # Custom filters for templateFactory
        self.templateFactory.filters['progressbar'] = self.progressbar
        self.templateFactory.filters['healthmeter'] = self.healthmeter
        self.templateFactory.filters['intervalformat'] = self.intervalformat
        self.templateFactory.filters['timestampformat'] = self.timestampformat
        self.templateFactory.filters['urlencode'] = urllib.quote
        self.templateFactory.filters['workinglink'] = self.workinglink
        self.templateFactory.filters['librarylink'] = self.librarylink

        root = SiteRoot(templateDir + '/media', self.application)
        site = server.Site(root)
        site.requestFactory = requestFactory(self)
        site.sessionFactory = sessionFactory(self)

        self.tryListen(port, site, get_interface(iface))
예제 #2
0
 def listen(self, interface=None):
     ip = get_interface(interface)
     if not ip is None:
         self.session.listen_on(6881, 6891, ip)
     else:
         self.session.listen_on(6881, 6891)
     logging.debug(ip)
예제 #3
0
    def get_status(self):

        s = os.statvfs(self.get_work_directory())
        diskfree = s.f_bfree * s.f_bsize
        diskfreepct = (float(s.f_bfree) / s.f_blocks) * 100

        s = os.statvfs(self.get_user_directory())
        userdiskfree = s.f_bfree * s.f_bsize
        userdiskfreepct = (float(s.f_bfree) / s.f_blocks) * 100

        queuedsize = 0
        queueddone = 0
        active_downloads = 0
        download_rate = 0
        upload_rate = 0
        connections = 0

        downloads = self.get_downloads()
        for d in downloads:
            if d.size:
                queuedsize += d.size
                queueddone += d.downloaded
            if d.active:
                active_downloads += 1
            download_rate += d.downloadrate
            upload_rate += d.uploadrate
            connections += d.connections

        if queuedsize:
            progress = round((float(queueddone) / queuedsize) * 100, 2)
        else:
            progress = 0

        interface = get_interface(self.get_option(
            ('downpour', 'interface'), '0.0.0.0'))
        if interface == '0.0.0.0':
            # Load IPs for local host
            ips = [i[4][0] for i in socket.getaddrinfo(socket.gethostname(), None)]
            ips = filter(lambda ip: ip[:4] != '127.' and ip[:2] != '::', ips)
            interface = ', '.join(dict(map(lambda i: (i,1), ips)).keys())
        hostname = '%s (%s)' % (socket.gethostname(), interface)

        status = {'host': hostname,
                'version': VERSION,
                'downloads': len(downloads),
                'active_downloads': active_downloads,
                'downloadrate': download_rate,
                'uploadrate': upload_rate,
                'progress': progress,
                'diskfree': diskfree,
                'diskfreepct': diskfreepct,
                'userdiskfree': userdiskfree,
                'userdiskfreepct': userdiskfreepct,
                'connections': connections,
                'paused': self.paused
            }
        return status
예제 #4
0
    def rebind(self):

        interface = self.manager.get_option(('downpour', 'interface'))
        try:
            ip = get_interface(interface)
        except Exception as e:
            raise Exception('The specified network interface is not available: %s' % interface)
            
        lt_manager.listen(interface)
        if not self.torrent is None and not ip is None:
            self.torrent.use_interface(ip)
예제 #5
0
    def rebind(self, errorTriggered=False):

        if self.rebinding and errorTriggered:
            logging.debug('Skipped rebind(), already waiting')
            return
        
        interface = self.manager.get_option(('downpour', 'interface'))
        try:
            logging.debug('Rebinding torrent manager to interface %s' % interface);
            ip = get_interface(interface)
            if lt_manager.session.is_paused():
                lt_manager.session.resume()
            lt_manager.listen(interface)
            if not self.torrent is None and not ip is None:
                self.torrent.use_interface(ip)
            self.rebinding = False
        except IOError as e:
            if errorTriggered:
                logging.info('The specified network interface is not available: %s' % interface)
            self.rebinding = True
            lt_manager.session.pause()
            reactor.callLater(30.0, self.rebind)
예제 #6
0
 def listen(self, interface=None):
     ip = get_interface(interface)
     if not ip is None:
         self.session.listen_on(6881, 6891, ip)
     else:
         self.session.listen_on(6881, 6891)
예제 #7
0
파일: manager.py 프로젝트: Saectar/downpour
    def get_status(self):

        s = os.statvfs(self.get_work_directory())
        diskfree = s.f_bfree * s.f_bsize
        diskfreepct = (float(s.f_bfree) / s.f_blocks) * 100

        s = os.statvfs(self.get_user_directory())
        userdiskfree = s.f_bfree * s.f_bsize
        userdiskfreepct = (float(s.f_bfree) / s.f_blocks) * 100

        queuedsize = 0
        queueddone = 0
        active_downloads = 0
        queued_downloads = 0
        download_rate = 0
        upload_rate = 0
        connections = 0

        downloads = self.get_downloads()
        for d in downloads:
            if d.size:
                queuedsize += d.size
                queueddone += d.downloaded
            if d.active:
                active_downloads += 1
            if d.status == Status.QUEUED:
                queued_downloads += 1
            download_rate += d.downloadrate
            upload_rate += d.uploadrate
            connections += d.connections

        if queuedsize:
            progress = round((float(queueddone) / queuedsize) * 100, 2)
        else:
            progress = 0

        interface = None
        try:
            interface = get_interface(self.get_option(
                ('downpour', 'interface'), '0.0.0.0'))
            if interface == '0.0.0.0':
                # Load IPs for local host
                ips = [i[4][0] for i in socket.getaddrinfo(socket.gethostname(), None)]
                ips = filter(lambda ip: ip[:4] != '127.' and ip[:2] != '::', ips)
                interface = ', '.join(dict(map(lambda i: (i,1), ips)).keys())
        except IOError as ioe:
            interface = 'disconnected'

        hostname = '%s (%s)' % (socket.gethostname(), interface)

        status = {'host': hostname,
                'version': VERSION,
                'downloads': len(downloads),
                'active_downloads': active_downloads,
                'queued_downloads': queued_downloads,
                'downloadrate': download_rate,
                'uploadrate': upload_rate,
                'progress': progress,
                'diskfree': diskfree,
                'diskfreepct': diskfreepct,
                'userdiskfree': userdiskfree,
                'userdiskfreepct': userdiskfreepct,
                'connections': connections,
                'paused': self.paused
            }
        return status