diff --git a/lbrynet/analytics/events.py b/lbrynet/analytics/events.py index 353e93073..6d6b0633f 100644 --- a/lbrynet/analytics/events.py +++ b/lbrynet/analytics/events.py @@ -60,10 +60,13 @@ class Events(object): properties = download_properties(*args, **kwargs) return self._event('Download Finished', properties) - def error(self, message, sd_hash=None): + def error(self, log_record): + """Record when a log message of ERROR or higher was emitted""" properties = { - 'message': message, - 'stream_info': sd_hash + 'message': log_record.message, + 'module': log_record.module, + 'lineno': log_record.lineno, + 'name': log_record.name, } return self._event('Error', properties) diff --git a/lbrynet/analytics/logging_handler.py b/lbrynet/analytics/logging_handler.py index fc932e6db..14dbf2e28 100644 --- a/lbrynet/analytics/logging_handler.py +++ b/lbrynet/analytics/logging_handler.py @@ -8,4 +8,4 @@ class Handler(logging.Handler): logging.Handler.__init__(self, level) def emit(self, record): - self.manager.send_error(record.message) + self.manager.send_error(record) diff --git a/lbrynet/analytics/manager.py b/lbrynet/analytics/manager.py index 135ffd602..d02dbb024 100644 --- a/lbrynet/analytics/manager.py +++ b/lbrynet/analytics/manager.py @@ -82,8 +82,8 @@ class Manager(object): event = self.events_generator.download_finished(id_, name, stream_info) self.analytics_api.track(event) - def send_error(self, message, sd_hash=None): - event = self.events_generator.error(message, sd_hash) + def send_error(self, message): + event = self.events_generator.error(message) self.analytics_api.track(event) def register_repeating_metric(self, event_name, value_generator, frequency=300): diff --git a/lbrynet/lbrynet_daemon/Daemon.py b/lbrynet/lbrynet_daemon/Daemon.py index 351019d94..97b6a486a 100644 --- a/lbrynet/lbrynet_daemon/Daemon.py +++ b/lbrynet/lbrynet_daemon/Daemon.py @@ -761,14 +761,13 @@ class Daemon(AuthJSONRPCServer): def eb(): if not r.called: - self.analytics_manager.send_error("sd blob download timed out", sd_hash) + log.error("sd blob download timed out: %s", sd_hash) r.errback(Exception("sd timeout")) r = defer.Deferred(None) reactor.callLater(timeout, eb) d = download_sd_blob(self.session, sd_hash, self.session.payment_rate_manager) - d.addErrback(lambda err: self.analytics_manager.send_error( - "error downloading sd blob: " + err, sd_hash)) + d.addErrback(log.fail(), "Error downloading sd blob: %s", sd_hash) d.addCallback(BlobStreamDescriptorReader) d.addCallback(lambda blob: blob.get_info()) d.addCallback(cb)