Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Ultimaker/Cura.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Karl Pietrowski <thopiekar@googlemail.com>2020-01-03 00:22:44 +0300
committerThomas Karl Pietrowski <thopiekar@googlemail.com>2020-01-03 00:22:44 +0300
commitba5a0b008502870f9cb2953383aab3d1c41915f1 (patch)
tree2d1b4f861966149c0932c0c191f5d07e272071cf
parentc261065d68b1b62c7188e255e0486487149ccc17 (diff)
SentrySDK: Turn on deep integration on demand
Only whenever the sentry_sdk module is there functions of this module will be used. The only changes, which were needed to be made, are done on cura_app.py and cura.CrashHandler. Whenever the module is not available, it's functions will be omitted. The if-clauses could happen earlier, but this at least the bare minimum, and, to be honest, on Ultimaker's distribution it won't speed up anything. I expect the if-clause to take the same amount of runtime sooner or later. The check is the same and it should be on Ultimaker's distribution always be "True". Signed-off-by: Thomas Karl Pietrowski <thopiekar@gmail.com> (github: thopiekar)
-rw-r--r--cura/CrashHandler.py81
-rwxr-xr-xcura_app.py37
2 files changed, 70 insertions, 48 deletions
diff --git a/cura/CrashHandler.py b/cura/CrashHandler.py
index 09fda25a73..6b33dc2d03 100644
--- a/cura/CrashHandler.py
+++ b/cura/CrashHandler.py
@@ -12,9 +12,13 @@ import json
import locale
from typing import cast
-from sentry_sdk.hub import Hub
-from sentry_sdk.utils import event_from_exception
-from sentry_sdk import configure_scope
+try:
+ from sentry_sdk.hub import Hub
+ from sentry_sdk.utils import event_from_exception
+ from sentry_sdk import configure_scope
+ with_sentry_sdk = True
+except ImportError:
+ with_sentry_sdk = False
from PyQt5.QtCore import QT_VERSION_STR, PYQT_VERSION_STR, QUrl
from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QLabel, QTextEdit, QGroupBox, QCheckBox, QPushButton
@@ -66,8 +70,9 @@ class CrashHandler:
if has_started and exception_type in skip_exception_types:
return
- with configure_scope() as scope:
- scope.set_tag("during_startup", not has_started)
+ if with_sentry_sdk:
+ with configure_scope() as scope:
+ scope.set_tag("during_startup", not has_started)
if not has_started:
self._send_report_checkbox = None
@@ -203,16 +208,17 @@ class CrashHandler:
layout.addWidget(label)
group.setLayout(layout)
- with configure_scope() as scope:
- scope.set_tag("qt_version", QT_VERSION_STR)
- scope.set_tag("pyqt_version", PYQT_VERSION_STR)
- scope.set_tag("os", platform.system())
- scope.set_tag("os_version", platform.version())
- scope.set_tag("locale_os", self.data["locale_os"])
- scope.set_tag("locale_cura", self.cura_locale)
- scope.set_tag("is_enterprise", ApplicationMetadata.IsEnterpriseVersion)
-
- scope.set_user({"id": str(uuid.getnode())})
+ if with_sentry_sdk:
+ with configure_scope() as scope:
+ scope.set_tag("qt_version", QT_VERSION_STR)
+ scope.set_tag("pyqt_version", PYQT_VERSION_STR)
+ scope.set_tag("os", platform.system())
+ scope.set_tag("os_version", platform.version())
+ scope.set_tag("locale_os", self.data["locale_os"])
+ scope.set_tag("locale_cura", self.cura_locale)
+ scope.set_tag("is_enterprise", ApplicationMetadata.IsEnterpriseVersion)
+
+ scope.set_user({"id": str(uuid.getnode())})
return group
@@ -247,12 +253,13 @@ class CrashHandler:
except:
pass
- with configure_scope() as scope:
- scope.set_tag("opengl_version", opengl_instance.getOpenGLVersion())
- scope.set_tag("gpu_vendor", opengl_instance.getGPUVendorName())
- scope.set_tag("gpu_type", opengl_instance.getGPUType())
- scope.set_tag("active_machine", active_machine_definition_id)
- scope.set_tag("active_machine_manufacturer", active_machine_manufacturer)
+ if with_sentry_sdk:
+ with configure_scope() as scope:
+ scope.set_tag("opengl_version", opengl_instance.getOpenGLVersion())
+ scope.set_tag("gpu_vendor", opengl_instance.getGPUVendorName())
+ scope.set_tag("gpu_type", opengl_instance.getGPUType())
+ scope.set_tag("active_machine", active_machine_definition_id)
+ scope.set_tag("active_machine_manufacturer", active_machine_manufacturer)
return info
@@ -335,9 +342,10 @@ class CrashHandler:
"module_name": module_name, "version": module_version, "is_plugin": isPlugin}
self.data["exception"] = exception_dict
- with configure_scope() as scope:
- scope.set_tag("is_plugin", isPlugin)
- scope.set_tag("module", module_name)
+ if with_sentry_sdk:
+ with configure_scope() as scope:
+ scope.set_tag("is_plugin", isPlugin)
+ scope.set_tag("module", module_name)
return group
@@ -396,15 +404,24 @@ class CrashHandler:
# Before sending data, the user comments are stored
self.data["user_info"] = self.user_description_text_area.toPlainText()
- try:
- hub = Hub.current
- event, hint = event_from_exception((self.exception_type, self.value, self.traceback))
- hub.capture_event(event, hint=hint)
- hub.flush()
- except Exception as e: # We don't want any exception to cause problems
- Logger.logException("e", "An exception occurred while trying to send crash report")
+ if with_sentry_sdk:
+ try:
+ hub = Hub.current
+ event, hint = event_from_exception((self.exception_type, self.value, self.traceback))
+ hub.capture_event(event, hint=hint)
+ hub.flush()
+ except Exception as e: # We don't want any exception to cause problems
+ Logger.logException("e", "An exception occurred while trying to send crash report")
+ if not self.has_started:
+ print("An exception occurred while trying to send crash report: %s" % e)
+ else:
+ msg = "SentrySDK is not available and the report could not be sent."
+ Logger.logException("e", msg)
if not self.has_started:
- print("An exception occurred while trying to send crash report: %s" % e)
+ print(msg)
+ print("Exception type: {}".format(self.exception_type))
+ print("Value: {}".format(self.value))
+ print("Traceback: {}".format(self.traceback))
os._exit(1)
diff --git a/cura_app.py b/cura_app.py
index 51f9041e86..cb97792662 100755
--- a/cura_app.py
+++ b/cura_app.py
@@ -12,7 +12,11 @@ from UM.Platform import Platform
from cura import ApplicationMetadata
from cura.ApplicationMetadata import CuraAppName
-import sentry_sdk
+try:
+ import sentry_sdk
+ with_sentry_sdk = True
+except ImportError:
+ with_sentry_sdk = False
parser = argparse.ArgumentParser(prog = "cura",
add_help = False)
@@ -24,21 +28,22 @@ parser.add_argument("--debug",
known_args = vars(parser.parse_known_args()[0])
-sentry_env = "production"
-if ApplicationMetadata.CuraVersion == "master":
- sentry_env = "development"
-try:
- if ApplicationMetadata.CuraVersion.split(".")[2] == "99":
- sentry_env = "nightly"
-except IndexError:
- pass
-
-sentry_sdk.init("https://5034bf0054fb4b889f82896326e79b13@sentry.io/1821564",
- environment = sentry_env,
- release = "cura%s" % ApplicationMetadata.CuraVersion,
- default_integrations = False,
- max_breadcrumbs = 300,
- server_name = "cura")
+if with_sentry_sdk:
+ sentry_env = "production"
+ if ApplicationMetadata.CuraVersion == "master":
+ sentry_env = "development"
+ try:
+ if ApplicationMetadata.CuraVersion.split(".")[2] == "99":
+ sentry_env = "nightly"
+ except IndexError:
+ pass
+
+ sentry_sdk.init("https://5034bf0054fb4b889f82896326e79b13@sentry.io/1821564",
+ environment = sentry_env,
+ release = "cura%s" % ApplicationMetadata.CuraVersion,
+ default_integrations = False,
+ max_breadcrumbs = 300,
+ server_name = "cura")
if not known_args["debug"]:
def get_cura_dir_path():