|  |  |  | """Install exception handler for process crash."""
 | 
					
						
							|  |  |  | import sys
 | 
					
						
							|  |  |  | import capnp
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from selfdrive.swaglog import cloudlog
 | 
					
						
							|  |  |  | from selfdrive.version import version
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import sentry_sdk
 | 
					
						
							|  |  |  | from sentry_sdk.integrations.threading import ThreadingIntegration
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def capture_exception(*args, **kwargs):
 | 
					
						
							|  |  |  |   exc_info = sys.exc_info()
 | 
					
						
							|  |  |  |   if not exc_info[0] is capnp.lib.capnp.KjException:
 | 
					
						
							|  |  |  |     sentry_sdk.capture_exception(*args, **kwargs)
 | 
					
						
							|  |  |  |     sentry_sdk.flush()  # https://github.com/getsentry/sentry-python/issues/291
 | 
					
						
							|  |  |  |   cloudlog.error("crash", exc_info=kwargs.get('exc_info', 1))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def bind_user(**kwargs):
 | 
					
						
							|  |  |  |   sentry_sdk.set_user(kwargs)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def bind_extra(**kwargs):
 | 
					
						
							|  |  |  |   for k, v in kwargs.items():
 | 
					
						
							|  |  |  |     sentry_sdk.set_tag(k, v)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def init():
 | 
					
						
							|  |  |  |   sentry_sdk.init("https://a8dc76b5bfb34908a601d67e2aa8bcf9@o33823.ingest.sentry.io/77924",
 | 
					
						
							|  |  |  |                   default_integrations=False, integrations=[ThreadingIntegration(propagate_hub=True)],
 | 
					
						
							|  |  |  |                   release=version)
 |