add get_availability
This commit is contained in:
parent
0a612ba36c
commit
8d961d6ce6
2 changed files with 51 additions and 0 deletions
|
@ -34,6 +34,27 @@ class BlobAvailabilityTracker(object):
|
||||||
if self._check_mine.running:
|
if self._check_mine.running:
|
||||||
self._check_mine.stop()
|
self._check_mine.stop()
|
||||||
|
|
||||||
|
def get_blob_availability(self, blob):
|
||||||
|
def _get_peer_count(peers):
|
||||||
|
have_blob = 0
|
||||||
|
for peer in peers:
|
||||||
|
if peer.is_available():
|
||||||
|
have_blob += 1
|
||||||
|
return {blob: have_blob}
|
||||||
|
|
||||||
|
d = self._peer_finder.find_peers_for_blob(blob)
|
||||||
|
d.addCallback(_get_peer_count)
|
||||||
|
return d
|
||||||
|
|
||||||
|
def get_availability_for_blobs(self, blobs):
|
||||||
|
dl = []
|
||||||
|
for blob in blobs:
|
||||||
|
if blob:
|
||||||
|
dl.append(self.get_blob_availability(blob))
|
||||||
|
d = defer.DeferredList(dl)
|
||||||
|
d.addCallback(lambda results: [r[1] for r in results])
|
||||||
|
return d
|
||||||
|
|
||||||
def _update_peers_for_blob(self, blob):
|
def _update_peers_for_blob(self, blob):
|
||||||
def _save_peer_info(blob_hash, peers):
|
def _save_peer_info(blob_hash, peers):
|
||||||
v = {blob_hash: peers}
|
v = {blob_hash: peers}
|
||||||
|
|
|
@ -2581,6 +2581,36 @@ class Daemon(jsonrpc.JSONRPC):
|
||||||
d = self._render_response(self.session.blob_tracker.last_mean_availability, OK_CODE)
|
d = self._render_response(self.session.blob_tracker.last_mean_availability, OK_CODE)
|
||||||
return d
|
return d
|
||||||
|
|
||||||
|
def jsonrpc_get_availability(self, p):
|
||||||
|
"""
|
||||||
|
Get stream availability for a winning claim
|
||||||
|
|
||||||
|
Arg:
|
||||||
|
name (str): lbry uri
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
peers per blob / total blobs
|
||||||
|
"""
|
||||||
|
|
||||||
|
def _get_mean(blob_availabilities):
|
||||||
|
peer_counts = []
|
||||||
|
for blob_availability in blob_availabilities:
|
||||||
|
for blob, peers in blob_availability.iteritems():
|
||||||
|
peer_counts.append(peers)
|
||||||
|
return round(1.0 * sum(peer_counts) / len(peer_counts), 2)
|
||||||
|
|
||||||
|
name = p['name']
|
||||||
|
|
||||||
|
d = self._resolve_name(name, force_refresh=True)
|
||||||
|
d.addCallback(get_sd_hash)
|
||||||
|
d.addCallback(self._download_sd_blob)
|
||||||
|
d.addCallback(lambda descriptor: [blob.get('blob_hash') for blob in descriptor['blobs']])
|
||||||
|
d.addCallback(self.session.blob_tracker.get_availability_for_blobs)
|
||||||
|
d.addCallback(_get_mean)
|
||||||
|
d.addCallback(lambda result: self._render_response(result, OK_CODE))
|
||||||
|
|
||||||
|
return d
|
||||||
|
|
||||||
|
|
||||||
def get_lbrynet_version_from_github():
|
def get_lbrynet_version_from_github():
|
||||||
"""Return the latest released version from github."""
|
"""Return the latest released version from github."""
|
||||||
|
|
Loading…
Reference in a new issue