""" Install exception handler for process crash. """
import sentry_sdk
from enum import Enum
from sentry_sdk . integrations . threading import ThreadingIntegration
from common . params import Params
from selfdrive . athena . registration import is_registered_device
from system . hardware import HARDWARE , PC
from selfdrive . swaglog import cloudlog
from selfdrive . version import get_branch , get_commit , get_origin , get_version , \
is_comma_remote , is_dirty , is_tested_branch
class SentryProject ( Enum ) :
# python project
SELFDRIVE = " https://6f3c7076c1e14b2aa10f5dde6dda0cc4@o33823.ingest.sentry.io/77924 "
# native project
SELFDRIVE_NATIVE = " https://3e4b586ed21a4479ad5d85083b639bc6@o33823.ingest.sentry.io/157615 "
def report_tombstone ( fn : str , message : str , contents : str ) - > None :
cloudlog . error ( { ' tombstone ' : message } )
with sentry_sdk . configure_scope ( ) as scope :
scope . set_extra ( " tombstone_fn " , fn )
scope . set_extra ( " tombstone " , contents )
sentry_sdk . capture_message ( message = message )
sentry_sdk . flush ( )
def capture_exception ( * args , * * kwargs ) - > None :
cloudlog . error ( " crash " , exc_info = kwargs . get ( ' exc_info ' , 1 ) )
try :
sentry_sdk . capture_exception ( * args , * * kwargs )
sentry_sdk . flush ( ) # https://github.com/getsentry/sentry-python/issues/291
except Exception :
cloudlog . exception ( " sentry exception " )
def set_tag ( key : str , value : str ) - > None :
sentry_sdk . set_tag ( key , value )
def init ( project : SentryProject ) - > None :
# forks like to mess with this, so double check
comma_remote = is_comma_remote ( ) and " commaai " in get_origin ( default = " " )
if not comma_remote or not is_registered_device ( ) or PC :
return
env = " release " if is_tested_branch ( ) else " master "
dongle_id = Params ( ) . get ( " DongleId " , encoding = ' utf-8 ' )
integrations = [ ]
if project == SentryProject . SELFDRIVE :
integrations . append ( ThreadingIntegration ( propagate_hub = True ) )
else :
sentry_sdk . utils . MAX_STRING_LENGTH = 8192
sentry_sdk . init ( project . value ,
default_integrations = False ,
release = get_version ( ) ,
integrations = integrations ,
traces_sample_rate = 1.0 ,
environment = env )
sentry_sdk . set_user ( { " id " : dongle_id } )
sentry_sdk . set_tag ( " dirty " , is_dirty ( ) )
sentry_sdk . set_tag ( " origin " , get_origin ( ) )
sentry_sdk . set_tag ( " branch " , get_branch ( ) )
sentry_sdk . set_tag ( " commit " , get_commit ( ) )
sentry_sdk . set_tag ( " device " , HARDWARE . get_device_type ( ) )
if project == SentryProject . SELFDRIVE :
sentry_sdk . Hub . current . start_session ( )