forked from LBRYCommunity/lbry-sdk
bug fixes
This commit is contained in:
parent
8b1bb673c1
commit
7167d47631
3 changed files with 44 additions and 9 deletions
lbrynet
|
@ -1,5 +1,6 @@
|
||||||
from lbrynet.core import looping_call_manager
|
from lbrynet.core import looping_call_manager
|
||||||
|
|
||||||
|
from twisted.internet import defer
|
||||||
from twisted.internet import task
|
from twisted.internet import task
|
||||||
|
|
||||||
import constants
|
import constants
|
||||||
|
@ -43,13 +44,24 @@ class Manager(object):
|
||||||
self.analytics_api.track(heartbeat)
|
self.analytics_api.track(heartbeat)
|
||||||
|
|
||||||
def _update_tracked_metrics(self):
|
def _update_tracked_metrics(self):
|
||||||
value = self.track.summarize(constants.BLOB_BYTES_UPLOADED)
|
should_send, value = self.track.summarize(constants.BLOB_BYTES_UPLOADED)
|
||||||
if value > 0:
|
if should_send:
|
||||||
event = self.events_generator.metric_observered(constants.BLOB_BYTES_UPLOADED, value)
|
event = self.events_generator.metric_observed(constants.BLOB_BYTES_UPLOADED, value)
|
||||||
self.analytics_api.track(event)
|
self.analytics_api.track(event)
|
||||||
|
|
||||||
def _send_repeating_metric(self, event_name, value_generator):
|
def _send_repeating_metric(self, event_name, value_generator):
|
||||||
should_send, value = value_generator()
|
result = value_generator()
|
||||||
|
if_deferred(result, self._send_repeating_metric_value, event_name)
|
||||||
|
|
||||||
|
def _send_repeating_metric_value(self, result, event_name):
|
||||||
|
should_send, value = result
|
||||||
if should_send:
|
if should_send:
|
||||||
event = self.events_generator.metric_observered(event_name, value)
|
event = self.events_generator.metric_observed(event_name, value)
|
||||||
self.analytics_api.track(event)
|
self.analytics_api.track(event)
|
||||||
|
|
||||||
|
|
||||||
|
def if_deferred(maybe_deferred, callback, *args, **kwargs):
|
||||||
|
if isinstance(maybe_deferred, defer.Deferred):
|
||||||
|
maybe_deferred.addCallback(callback, *args, **kwargs)
|
||||||
|
else:
|
||||||
|
callback(mabye_deferred, *args, **kwargs)
|
||||||
|
|
|
@ -13,5 +13,12 @@ class Track(object):
|
||||||
"""Apply `op` on the current values for `metric`.
|
"""Apply `op` on the current values for `metric`.
|
||||||
|
|
||||||
This operation also resets the metric.
|
This operation also resets the metric.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
a tuple (should_send, value)
|
||||||
"""
|
"""
|
||||||
return op(self.data.pop(metric, []))
|
try:
|
||||||
|
values = self.data.pop(metric)
|
||||||
|
return True, op(values)
|
||||||
|
except KeyError:
|
||||||
|
return False, None
|
||||||
|
|
|
@ -185,8 +185,24 @@ class CheckRemoteVersions(object):
|
||||||
return defer.fail(None)
|
return defer.fail(None)
|
||||||
|
|
||||||
|
|
||||||
|
class AlwaysSend(object):
|
||||||
|
def __init__(self, value_generator, *args, **kwargs):
|
||||||
|
self.value_generator = value_generator
|
||||||
|
self.args = args
|
||||||
|
self.kwargs = kwargs
|
||||||
|
|
||||||
|
def __call__(self):
|
||||||
|
d = defer.maybeDeferred(self.value_generator, *self.args, **self.kwargs)
|
||||||
|
d.addCallback(lambda v: (True, v))
|
||||||
|
return d
|
||||||
|
|
||||||
|
|
||||||
def calculate_available_blob_size(blob_manager):
|
def calculate_available_blob_size(blob_manager):
|
||||||
return sum(blob.length for blob in blob_manager.get_all_verified_blobs())
|
d = blob_manager.get_all_verified_blobs()
|
||||||
|
d.addCallback(
|
||||||
|
lambda blobs: defer.DeferredList([blob_manager.get_blob_length(b) for b in blobs]))
|
||||||
|
d.addCallback(lambda blob_lengths: sum(val for success, val in blob_lengths if success))
|
||||||
|
return d
|
||||||
|
|
||||||
|
|
||||||
class Daemon(jsonrpc.JSONRPC):
|
class Daemon(jsonrpc.JSONRPC):
|
||||||
|
@ -1021,9 +1037,9 @@ class Daemon(jsonrpc.JSONRPC):
|
||||||
self.analytics_manager = analytics.Manager(
|
self.analytics_manager = analytics.Manager(
|
||||||
analytics_api, events_generator, analytics.Track())
|
analytics_api, events_generator, analytics.Track())
|
||||||
self.analytics_manager.start()
|
self.analytics_manager.start()
|
||||||
self.register_repeating_metric(
|
self.analytics_manager.register_repeating_metric(
|
||||||
analytics.BLOB_BYTES_AVAILABLE,
|
analytics.BLOB_BYTES_AVAILABLE,
|
||||||
lambda: calculate_available_blob_size(self.session.blob_manager),
|
AlwaysSend(calculate_available_blob_size, self.session.blob_manager),
|
||||||
frequency=300
|
frequency=300
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue