From f16f48a90965b8c9d449f06c041c72d0bb99d5b5 Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@allmydata.com>
Date: Mon, 21 Apr 2008 12:19:17 -0700
Subject: [PATCH] download status: add time spent paused by the client (when
 we're serving over a slow HTTP link)

---
 src/allmydata/download.py               | 4 ++++
 src/allmydata/web/download-status.xhtml | 1 +
 src/allmydata/web/status.py             | 3 +++
 3 files changed, 8 insertions(+)

diff --git a/src/allmydata/download.py b/src/allmydata/download.py
index e08ef3c6..572878ae 100644
--- a/src/allmydata/download.py
+++ b/src/allmydata/download.py
@@ -449,6 +449,7 @@ class FileDownloader:
         self._results.timings["cumulative_fetch"] = 0.0
         self._results.timings["cumulative_decode"] = 0.0
         self._results.timings["cumulative_decrypt"] = 0.0
+        self._results.timings["paused"] = 0.0
 
         if IConsumer.providedBy(downloadable):
             downloadable.registerProducer(self, True)
@@ -489,6 +490,7 @@ class FileDownloader:
         if self._paused:
             return
         self._paused = defer.Deferred()
+        self._paused_at = time.time()
         if self._status:
             self._status.set_paused(True)
 
@@ -503,6 +505,8 @@ class FileDownloader:
     def stopProducing(self):
         self.log("Download.stopProducing")
         self._stopped = True
+        paused_for = time.time() - self._paused_at
+        self._results.timings['paused'] += paused_for
         if self._status:
             self._status.set_stopped(True)
             self._status.set_active(False)
diff --git a/src/allmydata/web/download-status.xhtml b/src/allmydata/web/download-status.xhtml
index 5a3d47e2..b782abc6 100644
--- a/src/allmydata/web/download-status.xhtml
+++ b/src/allmydata/web/download-status.xhtml
@@ -45,6 +45,7 @@
           <li>Cumulative Decrypting: <span n:render="time" n:data="time_cumulative_decrypt" />
           (<span n:render="rate" n:data="rate_decrypt" />)</li>
         </ul>
+        <li>Paused by client: <span n:render="time" n:data="time_paused" /></li>
       </ul>
       <li n:render="server_timings" />
     </ul>
diff --git a/src/allmydata/web/status.py b/src/allmydata/web/status.py
index fc91010f..b9b40c15 100644
--- a/src/allmydata/web/status.py
+++ b/src/allmydata/web/status.py
@@ -308,6 +308,9 @@ class DownloadResultsRendererMixin(RateAndTimeMixin):
     def data_time_cumulative_decrypt(self, ctx, data):
         return self._get_time("cumulative_decrypt")
 
+    def data_time_paused(self, ctx, data):
+        return self._get_time("paused")
+
     def _get_rate(self, name):
         d = self.download_results()
         def _convert(r):
-- 
2.45.2