r342 - in /debtorrent/trunk: DebTorrent/BT1/PiecePicker.py DebTorrent/CurrentRateMeasure.py DebTorrent/download_bt1.py debian/changelog

camrdale-guest at users.alioth.debian.org camrdale-guest at users.alioth.debian.org
Wed Jan 23 03:21:02 UTC 2008


Author: camrdale-guest
Date: Wed Jan 23 03:21:02 2008
New Revision: 342

URL: http://svn.debian.org/wsvn/debtorrent/?sc=1&rev=342
Log:
Make the download/upload statistics persist over restarts

Modified:
    debtorrent/trunk/DebTorrent/BT1/PiecePicker.py
    debtorrent/trunk/DebTorrent/CurrentRateMeasure.py
    debtorrent/trunk/DebTorrent/download_bt1.py
    debtorrent/trunk/debian/changelog

Modified: debtorrent/trunk/DebTorrent/BT1/PiecePicker.py
URL: http://svn.debian.org/wsvn/debtorrent/debtorrent/trunk/DebTorrent/BT1/PiecePicker.py?rev=342&op=diff
==============================================================================
--- debtorrent/trunk/DebTorrent/BT1/PiecePicker.py (original)
+++ debtorrent/trunk/DebTorrent/BT1/PiecePicker.py Wed Jan 23 03:21:02 2008
@@ -15,7 +15,7 @@
 from DebTorrent.clock import clock
 import logging
 
-logger = logging.getLogger('DebTorrent.BT1.Rerequester')
+logger = logging.getLogger('DebTorrent.BT1.PiecePicker')
 
 class PiecePicker:
     """Choose pieces to download.

Modified: debtorrent/trunk/DebTorrent/CurrentRateMeasure.py
URL: http://svn.debian.org/wsvn/debtorrent/debtorrent/trunk/DebTorrent/CurrentRateMeasure.py?rev=342&op=diff
==============================================================================
--- debtorrent/trunk/DebTorrent/CurrentRateMeasure.py (original)
+++ debtorrent/trunk/DebTorrent/CurrentRateMeasure.py Wed Jan 23 03:21:02 2008
@@ -25,7 +25,7 @@
     
     """
     
-    def __init__(self, max_rate_period, fudge = 1):
+    def __init__(self, max_rate_period, fudge = 1, saved_total = 0L):
         """Initialize the measurement.
         
         @type max_rate_period: C{float}
@@ -34,6 +34,9 @@
         @type fudge: C{int}
         @param fudge: time equivalent of writing to kernel-level TCP buffer, 
             for rate adjustment (optional, defaults to 1)
+        @type saved_total: C{long}
+        @param saved_total: the saved amount measured from a previous run
+            (optional, defaults to 0)
         
         """
         
@@ -41,7 +44,7 @@
         self.ratesince = clock() - fudge
         self.last = self.ratesince
         self.rate = 0.0
-        self.total = 0l
+        self.total = long(saved_total)
 
     def update_rate(self, amount):
         """Update the rate with new data.

Modified: debtorrent/trunk/DebTorrent/download_bt1.py
URL: http://svn.debian.org/wsvn/debtorrent/debtorrent/trunk/DebTorrent/download_bt1.py?rev=342&op=diff
==============================================================================
--- debtorrent/trunk/DebTorrent/download_bt1.py (original)
+++ debtorrent/trunk/DebTorrent/download_bt1.py Wed Jan 23 03:21:02 2008
@@ -518,6 +518,8 @@
     @ivar argslistheader: the header to print before the default config
     @type unpauseflag: C{threading.Event}
     @ivar unpauseflag: the flag to unset to pause the download
+    @type pickled_data: C{dictionary}
+    @ivar pickled_data: the saved data from a previous run
     @type downloader: L{BT1.Downloader.Downloader}
     @ivar downloader: the Downloader instance
     @type storagewrapper: L{BT1.StorageWrapper.StorageWrapper}
@@ -633,6 +635,7 @@
         self.argslistheader = argslistheader
         self.unpauseflag = Event()
         self.unpauseflag.set()
+        self.pickled_data = None
         self.downloader = None
         self.storagewrapper = None
         self.fileselector = None
@@ -892,21 +895,25 @@
         if self.doneflag.isSet():
             return None
 
+        try:
+            self.pickled_data = self.appdataobj.getTorrentData(self.infohash)
+        except:
+            logger.exception('Could not retrieve the pickled data')
+            
         enabled_files = None
-        data = self.appdataobj.getTorrentData(self.infohash)
         d = None
-        if data:
+        if self.pickled_data:
             try:
-                d = data['resume data']['priority']
+                d = self.pickled_data['resume data']['priority']
             except:
                 logger.exception('pickled data is corrupt')
-        if not data or d is None:
+        if not self.pickled_data or d is None:
             logger.info('no cached data, manually finding and hash checking old files')
-            data = None
+            self.pickled_data = None
             try:
                 enabled_files, priority = self.find_files()
                 if priority:
-                    data = {'resume data': {'priority': priority}}
+                    self.pickled_data = {'resume data': {'priority': priority}}
             except:
                 logger.exception('Error occurred when manually finding the old files')
         else:
@@ -951,8 +958,8 @@
                                          self.storage, self.storagewrapper,
                                          self.rawserver.add_task, self.picker,
                                          self._failed)
-        if data:
-            data = data.get('resume data')
+        if self.pickled_data:
+            data = self.pickled_data.get('resume data')
             if data:
                 self.fileselector.unpickle(data)
 
@@ -1099,9 +1106,19 @@
         for i in xrange(self.len_pieces):
             if self.storagewrapper.do_I_have(i):
                 self.picker.complete(i)
+        
+        total_up = 0L
+        total_down = 0L
+        if self.pickled_data:
+            try:
+                total_up = long(self.pickled_data['stats']['upload'])
+                total_down = long(self.pickled_data['stats']['download'])
+                logger.info('Initializing measures with previously downloaded %d, uploaded %d' % (total_down, total_up))
+            except:
+                logger.exception('Pickled stats from previous run are corrupt')
         self.upmeasure = Measure(self.config['max_rate_period'],
-                            self.config['upload_rate_fudge'])
-        self.downmeasure = Measure(self.config['max_rate_period'])
+                            self.config['upload_rate_fudge'], saved_total = total_up)
+        self.downmeasure = Measure(self.config['max_rate_period'], saved_total = total_down)
 
         if ratelimiter:
             self.ratelimiter = ratelimiter
@@ -1261,6 +1278,8 @@
             self.storage.close()
             self.rerequest_stopped()
         if self.fileselector and self.started:
+            torrentdata['stats'] = {'upload': self.upmeasure.get_total(),
+                                    'download': self.downmeasure.get_total()}
             if not self.failed:
                 self.fileselector.finish()
                 torrentdata['resume data'] = self.fileselector.pickle()

Modified: debtorrent/trunk/debian/changelog
URL: http://svn.debian.org/wsvn/debtorrent/debtorrent/trunk/debian/changelog?rev=342&op=diff
==============================================================================
--- debtorrent/trunk/debian/changelog (original)
+++ debtorrent/trunk/debian/changelog Wed Jan 23 03:21:02 2008
@@ -6,8 +6,9 @@
     - currently supported only by debian testing and unstable
     - see http://wiki.debian.org/DebTorrent/UniquePieces for more info
   * Add torrent names to the tracker display
+  * Make the download/upload statistics last over restarts
 
- -- Cameron Dale <camrdale at gmail.com>  Tue, 22 Jan 2008 16:15:37 -0800
+ -- Cameron Dale <camrdale at gmail.com>  Tue, 22 Jan 2008 19:19:35 -0800
 
 debtorrent (0.1.5) unstable; urgency=low
 




More information about the Debtorrent-commits mailing list