From b291cbdbc24705261038df29ad310b008b8ec3cc Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@cd1c1023-2f26-0410-ae45-c471fc1f0318> Date: Fri, 1 Feb 2008 19:29:50 +0000 Subject: [PATCH] - added packages download speed limiting support git-svn-id: http://svn.sabayonlinux.org/projects/entropy/trunk@1116 cd1c1023-2f26-0410-ae45-c471fc1f0318 --- TODO | 5 +---- conf/repositories.conf | 11 +++++++++++ libraries/entropy.py | 29 +++++++++++++++-------------- libraries/entropyConstants.py | 11 ++++++++++- 4 files changed, 37 insertions(+), 19 deletions(-) diff --git a/TODO b/TODO index 64cbe0a56..e29743c77 100644 --- a/TODO +++ b/TODO @@ -1,6 +1,4 @@ TODO list: - - add speed limiter - - make use flags check optional and controlled by a config option - rethink portage bashrc script - split RDEPEND and PDEPEND - migrate server code to ServerInterface @@ -12,9 +10,8 @@ TODO list: - complete reagent spm interface Spritz: - - handle queue dependencies in the queue tab too (*) - handle config files updates interface (*) - - add masking interface + - add masking interface (*) - add branch switching menu (for upgrades) - wrap root password request diff --git a/conf/repositories.conf b/conf/repositories.conf index 7abf9eee3..7a4d17e6e 100644 --- a/conf/repositories.conf +++ b/conf/repositories.conf @@ -60,3 +60,14 @@ officialrepositoryid|sabayonlinux.org # conntestlink| # conntestlink|http://svn.sabayonlinux.org + +# +# syntax for downloadspeedlimit: +# +# downloadspeedlimit: If you need a way to limit download speed, this is the option you were looking for +# downloadspeedlimit| +# +# example: +# downloadspeedlimit|30 +# +# downloadspeedlimit| diff --git a/libraries/entropy.py b/libraries/entropy.py index 79b42961b..0cc2221d8 100644 --- a/libraries/entropy.py +++ b/libraries/entropy.py @@ -25,6 +25,7 @@ import commands import urllib2 import socket import random +import time from entropyConstants import * from outputTools import * import exceptionTools @@ -2671,7 +2672,6 @@ class PackageInterface: header = red(" *** ") ) self.Entropy.entropyTools.ebeep(10) - import time time.sleep(20) os.remove(rootdir) @@ -2809,7 +2809,6 @@ class PackageInterface: header = red(" *** ") ) self.Entropy.entropyTools.ebeep(10) - import time time.sleep(20) try: shutil.rmtree(tofile, True) @@ -4306,17 +4305,17 @@ class urlFetcher: self.time_remaining = "(infinite)" self.elapsed = 0.0 self.updatestep = 0.2 + self.speedlimit = etpConst['downloadspeedlimit'] # kbytes/sec self.transferpollingtime = float(1)/4 def download(self): self.initVars() - if self.showSpeed: - self.speedUpdater = self.entropyTools.TimeScheduled( - self.updateSpeedInfo, - self.transferpollingtime - ) - self.speedUpdater.setName("download::"+self.url+str(random.random())) # set unique ID to thread, hopefully - self.speedUpdater.start() + self.speedUpdater = self.entropyTools.TimeScheduled( + self.updateSpeedInfo, + self.transferpollingtime + ) + self.speedUpdater.setName("download::"+self.url+str(random.random())) # set unique ID to thread, hopefully + self.speedUpdater.start() # set timeout socket.setdefaulttimeout(20) @@ -4383,6 +4382,11 @@ class urlFetcher: self.commitData(rsx) if self.showSpeed: self.updateProgress() + if self.speedlimit: + while self.datatransfer > self.speedlimit*1024: + time.sleep(0.1) + if self.showSpeed: + self.updateProgress() # kill thread self.close() @@ -4445,8 +4449,7 @@ class urlFetcher: self.remotefile.close() except: pass - if self.showSpeed: - self.speedUpdater.kill() + self.speedUpdater.kill() socket.setdefaulttimeout(2) def updateSpeedInfo(self): @@ -4474,8 +4477,6 @@ class rssFeed: self.items = {} self.itemscounter = 0 self.maxentries = maxentries - import time - self.time = time from xml.dom import minidom self.minidom = minidom @@ -4537,7 +4538,7 @@ class rssFeed: self.itemscounter += 1 self.items[self.itemscounter] = {} self.items[self.itemscounter]['title'] = title - self.items[self.itemscounter]['pubDate'] = self.time.strftime("%a, %d %b %Y %X +0000") + self.items[self.itemscounter]['pubDate'] = time.strftime("%a, %d %b %Y %X +0000") self.items[self.itemscounter]['description'] = description self.items[self.itemscounter]['link'] = link if link: diff --git a/libraries/entropyConstants.py b/libraries/entropyConstants.py index 00dc63eb3..adb24939a 100644 --- a/libraries/entropyConstants.py +++ b/libraries/entropyConstants.py @@ -647,6 +647,8 @@ def initConfig_entropyConstants(rootdir): 'verbose_cmd': "--verbose" }, + 'downloadspeedlimit': None, # equo packages download speed limit (in kb/sec) + 'dumpstoragedir': ETP_DIR+ETP_CACHESDIR, # data storage directory, useful to speed up equo across multiple issued commands # packages keywords/mask/unmask settings @@ -675,7 +677,7 @@ def initConfig_entropyConstants(rootdir): f = open(ETP_REVISION_FILE,"r") myrev = f.readline().strip() etpConst['entropyversion'] = myrev - + # handle pid file piddir = os.path.dirname(etpConst['pidfile']) if not os.path.exists(piddir): @@ -862,6 +864,13 @@ def initConfig_entropyConstants(rootdir): conntestlink = line.split("|")[1] etpConst['conntestlink'] = conntestlink + elif (line.find("downloadspeedlimit|") != -1) and (not line.startswith("#")) and (len(line.split("|")) == 2): + try: + etpConst['downloadspeedlimit'] = int(line.split("|")[1]) + except: + etpConst['downloadspeedlimit'] = None + + # align etpConst['binaryurirelativepath'] and etpConst['etpurirelativepath'] with etpConst['product'] etpConst['binaryurirelativepath'] = etpConst['product']+"/"+etpConst['binaryurirelativepath'] etpConst['etpurirelativepath'] = etpConst['product']+"/"+etpConst['etpurirelativepath']