.nickname: their self-provided nickname, or "?" (unicode)
.version: their self-provided version (string)
.app_versions: versions of each library they use (dict str->str)
- .advertised_addresses: what hosts they listen on (list of strings)
.remote_address: the external address from which they connected (string)
.tubid: for subscribers connecting with Foolscap, their tubid (string)
"""
def __init__(self, service_name, when,
nickname, version, app_versions,
- advertised_addresses, remote_address, tubid):
+ remote_address, tubid):
self.service_name = service_name
self.when = when
self.nickname = nickname
self.version = version
self.app_versions = app_versions
- self.advertised_addresses = advertised_addresses
self.remote_address = remote_address
self.tubid = tubid
for service_name, subscribers in self._subscribers.items():
for rref, when in subscribers.items():
tubid = rref.getRemoteTubID() or "?"
- advertised_addresses = rrefutil.hosts_for_rref(rref)
remote_address = rrefutil.stringify_remote_address(rref)
nickname, version, app_versions = u"?", u"?", {}
sd = SubscriberDescriptor(service_name, when,
nickname, version, app_versions,
- advertised_addresses, remote_address,
- tubid)
+ remote_address, tubid)
s.append(sd)
return s
# tubid will be None. Also, subscribers do not tell us which
# pubkey they use; only publishers do that.
tubid = rref.getRemoteTubID() or "?"
- advertised_addresses = rrefutil.hosts_for_rref(rref)
remote_address = rrefutil.stringify_remote_address(rref)
# these three assume subscriber_info["version"]==0, but
# should tolerate other versions
# 'when' is the time they subscribed
sd = SubscriberDescriptor(service_name, when,
nickname, version, app_versions,
- advertised_addresses, remote_address,
- tubid)
+ remote_address, tubid)
s.append(sd)
return s
return trap_and_discard(f, DeadReferenceError)
-def hosts_for_rref(rref, ignore_localhost=True):
- # actually, this only returns hostnames
- advertised = []
- for hint in rref.getLocationHints():
- # Foolscap-0.2.5 and earlier used strings in .locationHints, but we
- # require a newer version that uses tuples of ("ipv4", host, port)
- assert not isinstance(hint, str), hint
- if hint[0] == "ipv4":
- host = hint[1]
- if ignore_localhost and host == "127.0.0.1":
- continue
- advertised.append(host)
- return advertised
-
def hosts_for_furl(furl, ignore_localhost=True):
advertised = []
for hint in SturdyRef(furl).locationHints:
<th class="nickname-and-peerid">
<div class="service-nickname">Nickname</div>
<div class="nodeid data-chars">Tub ID</div></th>
- <th>Advertised IPs</th>
<th>Connected From</th>
<th>Since</th>
<th>Version</th>
<td class="nickname-and-peerid">
<div class="nickname"><n:slot name="nickname"/></div>
<div class="nodeid data-chars"><n:slot name="tubid"/></div></td>
- <td><n:slot name="advertised"/></td>
<td><n:slot name="connected"/></td>
<td class="service-since"><n:slot name="since"/></td>
<td class="service-version"><n:slot name="version"/></td>
def render_subscriber_row(self, ctx, s):
ctx.fillSlots("nickname", s.nickname)
ctx.fillSlots("tubid", s.tubid)
- ctx.fillSlots("advertised", " ".join(s.advertised_addresses))
ctx.fillSlots("connected", s.remote_address)
since_s = time.strftime("%H:%M:%S %d-%b-%Y", time.localtime(s.when))
ctx.fillSlots("since", since_s)