From f9f07c47e2f0806cedb39017a94b740a8998fb0c Mon Sep 17 00:00:00 2001 From: Job Evers-Meltzer <jobevers@users.noreply.github.com> Date: Sat, 1 Oct 2016 10:47:37 -0500 Subject: [PATCH] move analytics manager --- lbrynet/analytics/__init__.py | 6 ++--- lbrynet/analytics/api.py | 2 +- lbrynet/analytics/constants.py | 2 ++ lbrynet/analytics/manager.py | 44 ++++++++++++++++++++++++++++++++ lbrynet/lbrynet_daemon/Daemon.py | 43 +++---------------------------- 5 files changed, 54 insertions(+), 43 deletions(-) create mode 100644 lbrynet/analytics/constants.py create mode 100644 lbrynet/analytics/manager.py diff --git a/lbrynet/analytics/__init__.py b/lbrynet/analytics/__init__.py index 6d6c562f5..0b39a5e8f 100644 --- a/lbrynet/analytics/__init__.py +++ b/lbrynet/analytics/__init__.py @@ -1,6 +1,6 @@ +from constants import * from events import * -from api import AnalyticsApi as Api +from api import Api from track import Track +from manager import Manager -# Constants for metrics -BLOB_BYTES_UPLOADED = 'blob_bytes_uploaded' diff --git a/lbrynet/analytics/api.py b/lbrynet/analytics/api.py index db059bd9b..da7f4b8e4 100644 --- a/lbrynet/analytics/api.py +++ b/lbrynet/analytics/api.py @@ -28,7 +28,7 @@ def log_response(fn): return wrapper -class AnalyticsApi(object): +class Api(object): def __init__(self, session, url, write_key): self.session = session self.url = url diff --git a/lbrynet/analytics/constants.py b/lbrynet/analytics/constants.py new file mode 100644 index 000000000..059efe921 --- /dev/null +++ b/lbrynet/analytics/constants.py @@ -0,0 +1,2 @@ +# Constants for metrics +BLOB_BYTES_UPLOADED = 'blob_bytes_uploaded' diff --git a/lbrynet/analytics/manager.py b/lbrynet/analytics/manager.py new file mode 100644 index 000000000..6c8fda620 --- /dev/null +++ b/lbrynet/analytics/manager.py @@ -0,0 +1,44 @@ +import base58 + +from twisted.internet import task + +import api +import constants +import events +import track + + +class Manager(object): + def __init__(self): + self.analytics_api = None + self.events_generator = None + self.track = track.Track() + self.send_heartbeat = task.LoopingCall(self._send_heartbeat) + self.update_tracked_metrics = task.LoopingCall(self._update_tracked_metrics) + + def start(self, platform, wallet_type, lbry_id, session_id): + context = events.make_context(platform, wallet_type) + self.events_generator = events.Events(context, base58.b58encode(lbry_id), session_id) + self.analytics_api = api.Api.load() + self.send_heartbeat.start(60) + self.update_tracked_metrics.start(300) + + def shutdown(self): + if self.send_heartbeat.running: + self.send_heartbeat.stop() + if self.update_tracked_metrics.running: + self.update_tracked_metrics.stop() + + def send_download_started(self, name, stream_info=None): + event = self.events_generator.download_started(name, stream_info) + self.analytics_api.track(event) + + def _send_heartbeat(self): + heartbeat = self.events_generator.heartbeat() + self.analytics_api.track(heartbeat) + + def _update_tracked_metrics(self): + value = self.track.summarize(constants.BLOB_BYTES_UPLOADED) + if value > 0: + event = self.events_generator.metric_observered(analytics.BLOB_BYTES_UPLOADED, value) + self.analytics_api.track(event) diff --git a/lbrynet/lbrynet_daemon/Daemon.py b/lbrynet/lbrynet_daemon/Daemon.py index f94a0caa7..71051a225 100644 --- a/lbrynet/lbrynet_daemon/Daemon.py +++ b/lbrynet/lbrynet_daemon/Daemon.py @@ -203,40 +203,8 @@ class CheckRemoteVersions(object): return defer.fail(None) -class AnalyticsManager(object): - def __init__(self): - self.analytics_api = None - self.events_generator = None - self.track = analytics.Track() - self.send_heartbeat = LoopingCall(self._send_heartbeat) - self.update_tracked_metrics = LoopingCall(self._update_tracked_metrics) - - def start(self, platform, wallet_type, lbry_id, session_id): - context = analytics.make_context(platform, wallet_type) - self.events_generator = analytics.Events(context, base58.b58encode(lbry_id), session_id) - self.analytics_api = analytics.Api.load() - self.send_heartbeat.start(60) - self.update_tracked_metrics.start(300) - - def shutdown(self): - if self.send_heartbeat.running: - self.send_heartbeat.stop() - if self.update_tracked_metrics.running: - self.update_tracked_metrics.stop() - - def send_download_started(self, name, stream_info=None): - event = self.events_generator.download_started(name, stream_info) - self.analytics_api.track(event) - - def _send_heartbeat(self): - heartbeat = self.events_generator.heartbeat() - self.analytics_api.track(heartbeat) - - def _update_tracked_metrics(self): - value = self.track.summarize(analytics.BLOB_BYTES_UPLOADED) - if value > 0: - event = self.events_generator.metric_observered(analytics.BLOB_BYTES_UPLOADED, value) - self.analytics_api.track(event) +def calculate_available_blob_sizes(blob_manager): + return sum(blob.length for blob in blob_manager.get_all_verified_blobs()) class Daemon(jsonrpc.JSONRPC): @@ -276,7 +244,7 @@ class Daemon(jsonrpc.JSONRPC): self.first_run_after_update = False self.uploaded_temp_files = [] self._session_id = base58.b58encode(generate_id()) - self.analytics_manager = AnalyticsManager() + self.analytics_manager = analytics.Manager() if os.name == "nt": from lbrynet.winhelpers.knownpaths import get_path, FOLDERID, UserHandle @@ -453,7 +421,6 @@ class Daemon(jsonrpc.JSONRPC): ('version_checker', CheckRemoteVersions(self)), ('connection_problem_checker', self._check_connection_problems), ('pending_claim_checker', self._check_pending_claims), - ('send_tracked_metrics', self._send_tracked_metrics), ] for name, fn in looping_calls: self.looping_call_manager.register_looping_call(name, fn) @@ -645,7 +612,6 @@ class Daemon(jsonrpc.JSONRPC): d.addCallback(lambda _: threads.deferToThread(self._setup_data_directory)) d.addCallback(lambda _: self._check_db_migration()) d.addCallback(lambda _: self._get_settings()) - d.addCallback(lambda _: self._set_events()) d.addCallback(lambda _: self._get_session()) d.addCallback(lambda _: add_lbry_file_to_sd_identifier(self.sd_identifier)) d.addCallback(lambda _: self._setup_stream_identifier()) @@ -2876,7 +2842,6 @@ class _GetFileHelper(object): key = self._get_key(lbry_file) full_path = self._full_path(lbry_file) mime_type = mimetypes.guess_type(full_path)[0] - return { 'completed': lbry_file.completed, 'file_name': lbry_file.file_name, @@ -2899,7 +2864,7 @@ class _GetFileHelper(object): 'code': code, 'message': message } - + def _add_metadata(self, message, lbry_file): def _add_to_dict(metadata): message['metadata'] = metadata