From c2c7d2b32783118ee63fefbccdba97a84b11686a Mon Sep 17 00:00:00 2001 From: Jack Date: Mon, 2 Jan 2017 14:52:24 -0500 Subject: [PATCH] send bug reports to slack --- lbrynet/conf.py | 2 ++ lbrynet/core/utils.py | 8 +++++ lbrynet/lbrynet_daemon/Daemon.py | 55 ++++++++++++++++++++++++++++++-- 3 files changed, 63 insertions(+), 2 deletions(-) diff --git a/lbrynet/conf.py b/lbrynet/conf.py index ef87333a5..764dbe788 100644 --- a/lbrynet/conf.py +++ b/lbrynet/conf.py @@ -241,6 +241,8 @@ class ApplicationSettings(Settings): self.LOGGLY_TOKEN = 'LJEzATH4AzRgAwxjAP00LwZ2YGx3MwVgZTMuBQZ3MQuxLmOv' self.ANALYTICS_ENDPOINT = 'https://api.segment.io/v1' self.ANALYTICS_TOKEN = 'Ax5LZzR1o3q3Z3WjATASDwR5rKyHH0qOIRIbLmMXn2H=' + self.SLACK_WEBHOOK = 'nUE0pUZ6Yl9bo29epl5moTSwnl5wo20ip2IlqzywMKZiIQSFZR5' + \ + 'AHx4mY0VmF0WQZ1ESEP9kMHZlp1WzJwWOoKN3ImR1M2yUAaMyqGZ=' self.DB_REVISION_FILE_NAME = 'db_revision' Settings.__init__(self) diff --git a/lbrynet/core/utils.py b/lbrynet/core/utils.py index b55f6c208..fe1190d0e 100644 --- a/lbrynet/core/utils.py +++ b/lbrynet/core/utils.py @@ -37,6 +37,14 @@ def today(): return datetime.datetime.today() +def timedelta(**kwargs): + return datetime.timedelta(**kwargs) + + +def datetime_obj(*args, **kwargs): + return datetime.datetime(*args, **kwargs) + + def generate_id(num=None): h = get_lbry_hash_obj() if num is not None: diff --git a/lbrynet/lbrynet_daemon/Daemon.py b/lbrynet/lbrynet_daemon/Daemon.py index fbc1f5772..f6b5efb99 100644 --- a/lbrynet/lbrynet_daemon/Daemon.py +++ b/lbrynet/lbrynet_daemon/Daemon.py @@ -8,9 +8,9 @@ import subprocess import sys import base58 import requests +import urllib import simplejson as json from urllib2 import urlopen -from datetime import datetime from decimal import Decimal from twisted.web import server @@ -817,7 +817,8 @@ class Daemon(AuthJSONRPCServer): return d def _get_long_count_timestamp(self): - return int((datetime.utcnow() - (datetime(year=2012, month=12, day=21))).total_seconds()) + dt = utils.utcnow() - utils.datetime_obj(year=2012, month=12, day=21) + return int(dt.total_seconds()) def _update_claim_cache(self): f = open(os.path.join(self.db_dir, "stream_info_cache.json"), "w") @@ -1184,6 +1185,21 @@ class Daemon(AuthJSONRPCServer): log.info("Get version info: " + json.dumps(msg)) return self._render_response(msg, OK_CODE) + def jsonrpc_report_bug(self, p): + """ + Report a bug to slack + + Args: + 'message': string, message to send + Returns: + True if successful + """ + + bug_message = p['message'] + platform_name = self._get_platform()['platform'] + report_bug_to_slack(bug_message, self.lbryid, platform_name, lbrynet_version) + return self._render_response(True, OK_CODE) + def jsonrpc_get_lbry_session_info(self): """ Get information about the current lbrynet session @@ -2627,6 +2643,41 @@ class _GetFileHelper(object): return d +def loggly_time_string(dt): + formatted_dt = dt.strftime("%Y-%m-%dT%H:%M:%S") + microseconds = str(round(dt.microsecond * (10.0**-5), 3)) + return urllib.quote_plus(formatted_dt + microseconds + "Z") + + +def get_loggly_query_string(lbry_id): + decoded_id = base58.b58encode(lbry_id) + base_loggly_search_url = "https://lbry.loggly.com/search#terms=json.lbry_id%3A" + now = utils.now() + yesterday = now - utils.timedelta(days=1) + params = ( + decoded_id[:SHORT_ID_LEN], + loggly_time_string(yesterday), + loggly_time_string(now) + ) + formatted_params = "%s*&from=%s&until=%s&source_group=" % params + return base_loggly_search_url + formatted_params + + +def report_bug_to_slack(message, lbry_id, platform_name, app_version): + webhook = utils.deobfuscate(conf.settings.SLACK_WEBHOOK) + payload_template = "os: %s\n version: %s\n<%s|loggly>\n%s" + payload_params = ( + platform_name, + app_version, + get_loggly_query_string(lbry_id), + message + ) + payload = { + "text": payload_template % payload_params + } + requests.post(webhook, json.dumps(payload)) + + def get_lbry_file_search_value(p): for searchtype in (FileID.SD_HASH, FileID.NAME, FileID.FILE_NAME): value = p.get(searchtype)