Skip to content

Commit

Permalink
Merge pull request #5873 from drew2a/feature/automatically_send_errors
Browse files Browse the repository at this point in the history
Apply `error_reporting_requires_user_consent` to all core's errors
  • Loading branch information
drew2a committed Dec 22, 2020
2 parents e53c872 + ff35822 commit f664376
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 12 deletions.
5 changes: 3 additions & 2 deletions src/tribler-core/tribler_core/restapi/events_endpoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,11 +115,12 @@ async def write_data(self, message):

# An exception has occurred in Tribler. The event includes a readable
# string of the error and a Sentry event.
def on_tribler_exception(self, exception_text, sentry_event):
def on_tribler_exception(self, exception_text, sentry_event, error_reporting_requires_user_consent):
self.write_data({
"type": NTFY.TRIBLER_EXCEPTION.value,
"event": {"text": exception_text},
"sentry_event": sentry_event
"sentry_event": sentry_event,
"error_reporting_requires_user_consent": error_reporting_requires_user_consent
})

@docs(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ async def test_events(enable_api, session):
session.notifier.notify(subject, *data)
else:
session.notifier.notify(subject)
session.api_manager.root_endpoint.endpoints['/events'].on_tribler_exception("hi", None)
session.api_manager.root_endpoint.endpoints['/events'].on_tribler_exception("hi", None, False)
await events_future

event_socket_task.cancel()
Expand Down
4 changes: 3 additions & 1 deletion src/tribler-core/tribler_core/session.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,9 @@ def unhandled_error_observer(self, loop, context):
if not self.api_manager:
return
events = self.api_manager.get_endpoint('events')
events.on_tribler_exception(text_long, sentry_event)
events.on_tribler_exception(text_long,
sentry_event,
self.config.get_error_reporting_requires_user_consent())

state = self.api_manager.get_endpoint('state')
state.on_tribler_exception(text_long, sentry_event)
Expand Down
17 changes: 16 additions & 1 deletion src/tribler-gui/tribler_gui/dialogs/feedbackdialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,15 @@


class FeedbackDialog(AddBreadcrumbOnShowMixin, QDialog):
def __init__(self, parent, exception_text, tribler_version, start_time, sentry_event=None): # pylint: disable=R0914
def __init__( # pylint: disable=too-many-arguments, too-many-locals
self,
parent,
exception_text,
tribler_version,
start_time,
sentry_event=None,
error_reporting_requires_user_consent=True,
):
QDialog.__init__(self, parent)

uic.loadUi(get_ui_file_path('feedback_dialog.ui'), self)
Expand Down Expand Up @@ -86,6 +94,10 @@ def add_item_to_info_widget(key, value):
# Users can remove specific lines in the report
connect(self.env_variables_list.customContextMenuRequested, self.on_right_click_item)

self.error_reporting_requires_user_consent = error_reporting_requires_user_consent
if not error_reporting_requires_user_consent:
self.on_send_clicked(True)

def on_remove_entry(self):
self.env_variables_list.takeTopLevelItem(self.selected_item_index)

Expand All @@ -109,6 +121,9 @@ def on_cancel_clicked(self, checked):
def on_report_sent(self, response):
if not response:
return
if not self.error_reporting_requires_user_consent:
QApplication.quit()

sent = response[u'sent']

success_text = "Successfully sent the report! Thanks for your contribution."
Expand Down
10 changes: 8 additions & 2 deletions src/tribler-gui/tribler_gui/event_request_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,14 @@ def on_read_data(self):
reaction()
elif event_type == NTFY.TRIBLER_EXCEPTION.value:
text = json_dict["event"]["text"]
sentry_event = {'sentry_event': json_dict['sentry_event']}
raise RuntimeError(text, sentry_event)
backend_event = {
'backend_event': {
'sentry_event': json_dict['sentry_event'],
'error_reporting_requires_user_consent': json_dict['error_reporting_requires_user_consent'],
}
}

raise RuntimeError(text, backend_event)
self.current_event_string = ""

def on_finished(self):
Expand Down
20 changes: 15 additions & 5 deletions src/tribler-gui/tribler_gui/tribler_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,11 +111,14 @@ def on_exception(self, *exc_info):
exception_text = "".join(traceback.format_exception(*exc_info))

sentry_event = None
error_reporting_requires_user_consent = True
for arg in info_error.args:
key = 'sentry_event'
if isinstance(arg, dict) and key in arg:
sentry_event = arg[key]
break
if not isinstance(arg, dict) or 'backend_event' not in arg:
continue

backend_event = arg['backend_event']
sentry_event = backend_event['sentry_event']
error_reporting_requires_user_consent = backend_event['error_reporting_requires_user_consent']

if not sentry_event:
# then the exception occured in GUI
Expand Down Expand Up @@ -143,7 +146,14 @@ def on_exception(self, *exc_info):
if info_type is CoreConnectTimeoutError:
exception_text = exception_text + self.core_manager.core_traceback

dialog = FeedbackDialog(self, exception_text, self.tribler_version, self.start_time, sentry_event)
dialog = FeedbackDialog(
self,
exception_text,
self.tribler_version,
self.start_time,
sentry_event,
error_reporting_requires_user_consent,
)
dialog.show()

def __init__(self, core_args=None, core_env=None, api_port=None, api_key=None):
Expand Down

0 comments on commit f664376

Please sign in to comment.