Sun Sep 19 02:56:59 EDT 2010  tahoe@alistairphipps.com
  * 386_status_page_nicknames

New patches:

[386_status_page_nicknames
tahoe@alistairphipps.com**20100919065659
 Ignore-this: 31c58a74489839b51e534372a98a839f
] {
hunk ./src/allmydata/client.py 294
         self.history = History(self.stats_provider)
         self.terminator = Terminator()
         self.terminator.setServiceParent(self)
-        self.add_service(Uploader(helper_furl, self.stats_provider))
+        self.add_service(Uploader(helper_furl, self.stats_provider, self.history))
         self.init_stub_client()
         self.init_nodemaker()
 
hunk ./src/allmydata/client.py 499
 
     def upload(self, uploadable):
         uploader = self.getServiceNamed("uploader")
-        return uploader.upload(uploadable, history=self.get_history())
+        return uploader.upload(uploadable)
hunk ./src/allmydata/immutable/upload.py 1401
     name = "uploader"
     URI_LIT_SIZE_THRESHOLD = 55
 
-    def __init__(self, helper_furl=None, stats_provider=None):
+    def __init__(self, helper_furl=None, stats_provider=None, history=None):
         self._helper_furl = helper_furl
         self.stats_provider = stats_provider
         self._helper = None
hunk ./src/allmydata/immutable/upload.py 1406
         self._all_uploads = weakref.WeakKeyDictionary() # for debugging
+        self.history = history
         log.PrefixingLogMixin.__init__(self, facility="tahoe.immutable.upload")
         service.MultiService.__init__(self)
 
hunk ./src/allmydata/immutable/upload.py 1440
         return (self._helper_furl, bool(self._helper))
 
 
-    def upload(self, uploadable, history=None):
+    def upload(self, uploadable):
         """
         Returns a Deferred that will fire with the UploadResults instance.
         """
hunk ./src/allmydata/immutable/upload.py 1446
         assert self.parent
         assert self.running
-
         uploadable = IUploadable(uploadable)
         d = uploadable.get_size()
         def _got_size(size):
hunk ./src/allmydata/immutable/upload.py 1457
             if self.stats_provider:
                 self.stats_provider.count('uploader.files_uploaded', 1)
                 self.stats_provider.count('uploader.bytes_uploaded', size)
-
             if size <= self.URI_LIT_SIZE_THRESHOLD:
                 uploader = LiteralUploader()
                 return uploader.start(uploadable)
hunk ./src/allmydata/immutable/upload.py 1474
                     d2.addCallback(lambda x: uploader.start(eu))
 
                 self._all_uploads[uploader] = None
-                if history:
-                    history.add_upload(uploader.get_upload_status())
+                if self.history:
+                    self.history.add_upload(uploader.get_upload_status())
                 def turn_verifycap_into_read_cap(uploadresults):
                     # Generate the uri from the verifycap plus the key.
                     d3 = uploadable.get_encryption_key()
hunk ./src/allmydata/nodemaker.py 109
             convergence = self.secret_holder.get_convergence_secret()
         packed = pack_children(children, None, deep_immutable=True)
         uploadable = Data(packed, convergence)
-        d = self.uploader.upload(uploadable, history=self.history)
+        d = self.uploader.upload(uploadable)
         d.addCallback(lambda results: self.create_from_cap(None, results.uri))
         d.addCallback(self._create_dirnode)
         return d
hunk ./src/allmydata/web/root.py 165
 
         self.child_file = FileHandler(client)
         self.child_named = FileHandler(client)
-        self.child_status = status.Status(client.get_history())
+        self.child_status = status.Status(client)
         self.child_statistics = status.Statistics(client.stats_provider)
 
     def child_helper_status(self, ctx):
hunk ./src/allmydata/web/status.py 21
         return abbreviate_rate(data)
 
 class UploadResultsRendererMixin(RateAndTimeMixin):
-    # this requires a method named 'upload_results'
+    # this requires a method named 'upload_results'and 'get_storage_broker'
 
     def render_pushed_shares(self, ctx, data):
         d = self.upload_results()
hunk ./src/allmydata/web/status.py 41
                 return "None"
             l = T.ul()
             for shnum, peerids in sorted(sharemap.items()):
+                nicknames = ', '.join([self.get_storage_broker().get_nickname_for_serverid(i) for i in peerids])
                 peerids = ', '.join([idlib.shortnodeid_b2a(i) for i in peerids])
hunk ./src/allmydata/web/status.py 43
-                l[T.li["%d -> placed on [%s]" % (shnum, peerids)]]
+                l[T.li["%d -> placed on %s [%s]" % (shnum, nicknames, peerids)]]
             return l
         d.addCallback(_render)
         return d
hunk ./src/allmydata/web/status.py 59
                 peerid_s = idlib.shortnodeid_b2a(peerid)
                 shares_s = ",".join(["#%d" % shnum
                                      for shnum in servermap[peerid]])
-                l[T.li["[%s] got share%s: %s" % (peerid_s,
+                l[T.li["%s [%s] got share%s: %s" % (self.get_storage_broker().get_nickname_for_serverid(peerid), peerid_s,
                                                  plural(servermap[peerid]),
                                                  shares_s)]]
             return l
hunk ./src/allmydata/web/status.py 155
 class UploadStatusPage(UploadResultsRendererMixin, rend.Page):
     docFactory = getxmlfile("upload-status.xhtml")
 
-    def __init__(self, data):
+    def __init__(self, data, storage_broker):
         rend.Page.__init__(self, data)
         self.upload_status = data
hunk ./src/allmydata/web/status.py 158
+        self.storage_broker = storage_broker
 
hunk ./src/allmydata/web/status.py 160
+    def get_storage_broker(self):
+        return self.storage_broker;
+    
     def upload_results(self):
         return defer.maybeDeferred(self.upload_status.get_results)
 
hunk ./src/allmydata/web/status.py 216
         return data.get_status()
 
 class DownloadResultsRendererMixin(RateAndTimeMixin):
-    # this requires a method named 'download_results'
+    # this requires a method named 'download_results' and 'get_storage_broker'
 
     def render_servermap(self, ctx, data):
         d = self.download_results()
hunk ./src/allmydata/web/status.py 229
                 peerid_s = idlib.shortnodeid_b2a(peerid)
                 shares_s = ",".join(["#%d" % shnum
                                      for shnum in servermap[peerid]])
-                l[T.li["[%s] has share%s: %s" % (peerid_s,
+                l[T.li["%s [%s] has share%s: %s" % (self.get_storage_broker().get_nickname_for_serverid(peerid), peerid_s,
                                                  plural(servermap[peerid]),
                                                  shares_s)]]
             return l
hunk ./src/allmydata/web/status.py 242
         def _got(servers_used):
             if not servers_used:
                 return ""
-            peerids_s = ", ".join(["[%s]" % idlib.shortnodeid_b2a(peerid)
+            peerids_s = ", ".join(["%s [%s]" % (self.get_storage_broker().get_nickname_for_serverid(peerid), idlib.shortnodeid_b2a(peerid))
                                    for peerid in servers_used])
             return T.li["Servers Used: ", peerids_s]
         d.addCallback(_got)
hunk ./src/allmydata/web/status.py 257
             l = T.ul()
             for peerid in sorted(server_problems.keys()):
                 peerid_s = idlib.shortnodeid_b2a(peerid)
-                l[T.li["[%s]: %s" % (peerid_s, server_problems[peerid])]]
+                l[T.li["%s [%s]: %s" % (self.get_storage_broker().get_nickname_for_serverid(peerid), peerid_s, server_problems[peerid])]]
             return T.li["Server Problems:", l]
         d.addCallback(_got)
         return d
hunk ./src/allmydata/web/status.py 334
                 peerid_s = idlib.shortnodeid_b2a(peerid)
                 times_s = ", ".join([self.render_time(None, t)
                                      for t in per_server[peerid]])
-                l[T.li["[%s]: %s" % (peerid_s, times_s)]]
+                l[T.li["%s [%s]: %s" % (self.get_storage_broker().get_nickname_for_serverid(peerid), peerid_s, times_s)]]
             return T.li["Per-Server Segment Fetch Response Times: ", l]
         d.addCallback(_render)
         return d
hunk ./src/allmydata/web/status.py 342
 class DownloadStatusPage(DownloadResultsRendererMixin, rend.Page):
     docFactory = getxmlfile("download-status.xhtml")
 
-    def __init__(self, data):
+    def __init__(self, data, storage_broker):
         rend.Page.__init__(self, data)
         self.download_status = data
hunk ./src/allmydata/web/status.py 345
+        self.storage_broker = storage_broker
 
hunk ./src/allmydata/web/status.py 347
+    def get_storage_broker(self):
+        return self.storage_broker
+    
     def download_results(self):
         return defer.maybeDeferred(self.download_status.get_results)
 
hunk ./src/allmydata/web/status.py 398
         l = T.ul()
 
         t = T.table(class_="status-download-events")
-        t[T.tr[T.td["serverid"], T.td["sent"], T.td["received"],
+        t[T.tr[T.td["nickname"], T.td["serverid"], T.td["sent"], T.td["received"],
                T.td["shnums"], T.td["RTT"]]]
         dyhb_events = []
         for serverid,requests in self.download_status.dyhb_requests.iteritems():
hunk ./src/allmydata/web/status.py 414
             if not shnums:
                 shnums = []
             t[T.tr(style="background: %s" % self.color(serverid))[
-                [T.td[serverid_s], T.td[srt(sent)], T.td[srt(received)],
+                [T.td[self.get_storage_broker().get_nickname_for_serverid(serverid)], T.td[serverid_s], T.td[srt(sent)], T.td[srt(received)],
                  T.td[",".join([str(shnum) for shnum in shnums])],
                  T.td[self.render_time(None, rtt)],
                  ]]]
hunk ./src/allmydata/web/status.py 468
         l["Segment Events:", t]
 
         t = T.table(border="1")
-        t[T.tr[T.td["serverid"], T.td["shnum"], T.td["range"],
+        t[T.tr[T.td["nickname"], T.td["serverid"], T.td["shnum"], T.td["range"],
                T.td["txtime"], T.td["rxtime"], T.td["received"], T.td["RTT"]]]
         reqtime = (None, None)
         request_events = []
hunk ./src/allmydata/web/status.py 483
                 rtt = received - sent
             peerid_s = idlib.shortnodeid_b2a(peerid)
             t[T.tr(style="background: %s" % self.color(peerid))[
-                T.td[peerid_s], T.td[shnum],
+                T.td[self.get_storage_broker().get_nickname_for_serverid(peerid)], T.td[peerid_s], T.td[shnum],
                 T.td["[%d:+%d]" % (start, length)],
                 T.td[srt(sent)], T.td[srt(received)], T.td[receivedlen],
                 T.td[self.render_time(None, rtt)],
hunk ./src/allmydata/web/status.py 539
 class RetrieveStatusPage(rend.Page, RateAndTimeMixin):
     docFactory = getxmlfile("retrieve-status.xhtml")
 
-    def __init__(self, data):
+    def __init__(self, data, storage_broker):
         rend.Page.__init__(self, data)
         self.retrieve_status = data
hunk ./src/allmydata/web/status.py 542
+        self.storage_broker = storage_broker
+        
+    def get_storage_broker(self):
+        return self.storage_broker
 
     def render_started(self, ctx, data):
         TIME_FORMAT = "%H:%M:%S %d-%b-%Y"
hunk ./src/allmydata/web/status.py 588
         l = T.ul()
         for peerid in sorted(problems.keys()):
             peerid_s = idlib.shortnodeid_b2a(peerid)
-            l[T.li["[%s]: %s" % (peerid_s, problems[peerid])]]
+            l[T.li["%s [%s]: %s" % (self.get_storage_broker().get_nickname_for_serverid(peerid), peerid_s, problems[peerid])]]
         return ctx.tag["Server Problems:", l]
 
     def _get_rate(self, data, name):
hunk ./src/allmydata/web/status.py 632
 class PublishStatusPage(rend.Page, RateAndTimeMixin):
     docFactory = getxmlfile("publish-status.xhtml")
 
-    def __init__(self, data):
+    def __init__(self, data, storage_broker):
         rend.Page.__init__(self, data)
         self.publish_status = data
hunk ./src/allmydata/web/status.py 635
+        self.storage_broker = storage_broker
+        
+    def get_storage_broker(self):
+        return self.storage_broker
 
     def render_started(self, ctx, data):
         TIME_FORMAT = "%H:%M:%S %d-%b-%Y"
hunk ./src/allmydata/web/status.py 682
         sharemap = servermap.make_sharemap()
         for shnum in sorted(sharemap.keys()):
             l[T.li["%d -> Placed on " % shnum,
-                   ", ".join(["[%s]" % idlib.shortnodeid_b2a(peerid)
+                   ", ".join(["%s [%s]" % (self.get_storage_broker().get_nickname_for_serverid(peerid), idlib.shortnodeid_b2a(peerid))
                               for peerid in sharemap[shnum]])]]
         return ctx.tag["Sharemap:", l]
 
hunk ./src/allmydata/web/status.py 693
         l = T.ul()
         for peerid in sorted(problems.keys()):
             peerid_s = idlib.shortnodeid_b2a(peerid)
-            l[T.li["[%s]: %s" % (peerid_s, problems[peerid])]]
+            l[T.li["%s [%s]: %s" % (self.get_storage_broker().get_nickname_for_serverid(peerid), peerid_s, problems[peerid])]]
         return ctx.tag["Server Problems:", l]
 
     def _get_rate(self, data, name):
hunk ./src/allmydata/web/status.py 740
             peerid_s = idlib.shortnodeid_b2a(peerid)
             times_s = ", ".join([self.render_time(None, t)
                                  for t in per_server[peerid]])
-            l[T.li["[%s]: %s" % (peerid_s, times_s)]]
+            l[T.li["%s [%s]: %s" % (self.get_storage_broker().get_nickname_for_serverid(peerid), peerid_s, times_s)]]
         return T.li["Per-Server Response Times: ", l]
 
 class MapupdateStatusPage(rend.Page, RateAndTimeMixin):
hunk ./src/allmydata/web/status.py 746
     docFactory = getxmlfile("map-update-status.xhtml")
 
-    def __init__(self, data):
+    def __init__(self, data, storage_broker):
         rend.Page.__init__(self, data)
         self.update_status = data
hunk ./src/allmydata/web/status.py 749
+        self.storage_broker = storage_broker
+        
+    def get_storage_broker(self):
+        return self.storage_broker
 
     def render_started(self, ctx, data):
         TIME_FORMAT = "%H:%M:%S %d-%b-%Y"
hunk ./src/allmydata/web/status.py 794
         l = T.ul()
         for peerid in sorted(problems.keys()):
             peerid_s = idlib.shortnodeid_b2a(peerid)
-            l[T.li["[%s]: %s" % (peerid_s, problems[peerid])]]
+            l[T.li["%s [%s]: %s" % (self.get_storage_broker().get_nickname_for_serverid(peerid), peerid_s, problems[peerid])]]
         return ctx.tag["Server Problems:", l]
 
     def render_privkey_from(self, ctx, data):
hunk ./src/allmydata/web/status.py 800
         peerid = data.get_privkey_from()
         if peerid:
-            return ctx.tag["Got privkey from: [%s]"
-                           % idlib.shortnodeid_b2a(peerid)]
+            return ctx.tag["Got privkey from: %s [%s]"
+                           % (self.get_storage_broker().get_nickname_for_serverid(peerid), idlib.shortnodeid_b2a(peerid))]
         else:
             return ""
 
hunk ./src/allmydata/web/status.py 834
                 else:
                     times.append( "privkey(" + self.render_time(None, t) + ")" )
             times_s = ", ".join(times)
-            l[T.li["[%s]: %s" % (peerid_s, times_s)]]
+            l[T.li["%s [%s]: %s" % (self.get_storage_broker().get_nickname_for_serverid(peerid), peerid_s, times_s)]]
         return T.li["Per-Server Response Times: ", l]
 
     def render_timing_chart(self, ctx, data):
hunk ./src/allmydata/web/status.py 862
         for peerid in peerids:
             times = per_server[peerid]
             peerid_s = idlib.shortnodeid_b2a(peerid)
-            peerids_s.append(peerid_s)
+            peerids_s.append(self.get_storage_broker().get_nickname_for_serverid(peerid) + "[" + peerid_s + "]")
             # for servermap updates, there are either one or two queries per
             # peer. The second (if present) is to get the privkey.
             op,q_started,q_elapsed = times[0]
hunk ./src/allmydata/web/status.py 905
     docFactory = getxmlfile("status.xhtml")
     addSlash = True
 
-    def __init__(self, history):
-        rend.Page.__init__(self, history)
-        self.history = history
+    def __init__(self, client):
+        rend.Page.__init__(self, client.get_history())
+        self.client = client
+        self.history = client.get_history()
 
     def renderHTTP(self, ctx):
         req = inevow.IRequest(ctx)
hunk ./src/allmydata/web/status.py 946
         return simplejson.dumps(data, indent=1) + "\n"
 
     def _get_all_statuses(self):
-        h = self.history
+        h = self.client.get_history()
         return itertools.chain(h.list_all_upload_statuses(),
                                h.list_all_download_statuses(),
                                h.list_all_mapupdate_statuses(),
hunk ./src/allmydata/web/status.py 1029
         return ctx.tag
 
     def childFactory(self, ctx, name):
-        h = self.history
+        h = self.client.get_history()
         stype,count_s = name.split("-")
         count = int(count_s)
         if stype == "up":
hunk ./src/allmydata/web/status.py 1038
                 # immutable-upload helpers use the same status object as a
                 # regular immutable-upload
                 if s.get_counter() == count:
-                    return UploadStatusPage(s)
+                    return UploadStatusPage(s, self.client.get_storage_broker())
         if stype == "down":
             for s in h.list_all_download_statuses():
                 if s.get_counter() == count:
hunk ./src/allmydata/web/status.py 1042
-                    return DownloadStatusPage(s)
+                    return DownloadStatusPage(s, self.client.get_storage_broker())
         if stype == "mapupdate":
             for s in h.list_all_mapupdate_statuses():
                 if s.get_counter() == count:
hunk ./src/allmydata/web/status.py 1046
-                    return MapupdateStatusPage(s)
+                    return MapupdateStatusPage(s, self.client.get_storage_broker())
         if stype == "publish":
             for s in h.list_all_publish_statuses():
                 if s.get_counter() == count:
hunk ./src/allmydata/web/status.py 1050
-                    return PublishStatusPage(s)
+                    return PublishStatusPage(s, self.client.get_storage_broker())
         if stype == "retrieve":
             for s in h.list_all_retrieve_statuses():
                 if s.get_counter() == count:
hunk ./src/allmydata/web/status.py 1054
-                    return RetrieveStatusPage(s)
+                    return RetrieveStatusPage(s, self.client.get_storage_broker())
 
 
 class HelperStatus(rend.Page):
hunk ./src/allmydata/web/unlinked.py 62
     def __init__(self, upload_results):
         rend.Page.__init__(self)
         self.results = upload_results
+        self.storage_broker = UnlinkedStorageBroker()
 
     def upload_results(self):
         return defer.succeed(self.results)
hunk ./src/allmydata/web/unlinked.py 66
+    
+    def get_storage_broker(self):
+        return self.storage_broker
 
     def data_done(self, ctx, data):
         d = self.upload_results()
hunk ./src/allmydata/web/unlinked.py 163
         d.addCallback(lambda dirnode: dirnode.get_uri())
     return d
 
+class UnlinkedStorageBroker:
+    def get_nickname_for_serverid(self, server_id):
+        return 'NICKNAME' + server_id
+    
}

Context:

[docs/quickstart.html: note dependency on python development files, e.g. on Ubuntu
david-sarah@jacaranda.org**20100914040456
 Ignore-this: 8f2ab59d3048de1ea0fbea5850843045
] 
[TAG allmydata-tahoe-1.8.0c4
zooko@zooko.com**20100912062225
 Ignore-this: 4c99e0eed253e2a38ed9ea4f4db5ad77
] 
Patch bundle hash:
cf8c3608d165ac8266dccf5bac9648a888e82600