package Ġorg . dh is 2 . utils . reporting Ċ Ċ import Ġandroid . net . Uri Ċ import Ġio . sentry . Breadcrumb Ċ import Ġio . sentry . Hub Adapter Ċ import Ġio . sentry . I Hub Ċ import Ġio . sentry . S entry Ċ import Ġio . sentry . Span Status Ċ import Ġio . sentry . protocol . User Ċ import Ġjava . io . IOException Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Response Ċ import Ġorg . dh is 2 . data . prefs . Preference Provider Ċ import Ġorg . dh is 2 . utils . Constants . SERVER Ċ import Ġorg . dh is 2 . utils . Constants . USER Ċ Ċ class ĠS entry Ok Http Interceptor ( ĊĠĠĠ Ġval Ġpreference Provider : ĠPreference Provider , ĊĠĠĠ Ġprivate Ġval Ġhub : ĠI Hub Ġ= ĠHub Adapter . getInstance () Ċ ) Ġ: ĠInter ceptor Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġintercept ( chain : ĠInter ceptor . Chain ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġrequest Ġ= Ġchain . request () ĊĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġrequest . url (). toString () ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠUri . parse ( url ). path ?. split (" api ") ?. get ( 1 ) Ġ?: Ġurl ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġrequest . method () ĊĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= ĠS entry . start Transaction ( path , ĠOPER ATION ) ĊĠĠĠĠĠĠĠ ĠS entry . configure Scope Ġ{ Ġscope Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope . set Transaction ( transaction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope . user Ġ= ĠUser (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= Ġpreference Provider . getString ( USER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope . setTag ( SERVER _ NAME , Ġpreference Provider . getString ( SERVER ) Ġ?: Ġ"") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġspan Ġ= Ġhub . span ?. start Child ( OPERATION , Ġ"$ method Ġ$ url ") ĊĊĠĠĠĠĠĠĠ Ġvar Ġresponse : ĠResponse ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġvar Ġcode : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspan ?. to S entry Trace ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġrequest . newBuilder (). add Header ( it . name , Ġit . value ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġchain . proceed ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ= Ġresponse . code () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresponse ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspan ?. throwable Ġ= Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspan ?. finish ( code ?. let Ġ{ ĠSpan Status . from HttpStatusCode ( it , ĠSpan Status . INTERNAL _ ERROR ) Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbreadcrumb Ġ= ĠB readcrumb . http ( request . url (). toString (), Ġrequest . method ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreadcrumb . setData ( STATUS _ CODE , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . body ()?. content Length (). if Has Valid Length Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreadcrumb . setData ( REQUEST _ SIZE , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse ?. body ()?. content Length (). if Has Valid Length Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreadcrumb . setData ( RESPONSE _ SIZE , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhub . add Breadcrumb ( breadcrumb ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . finish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠLong ?. if Has Valid Length ( fn : Ġ( Long ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ!= Ġnull Ġ&& Ġthis Ġ!= Ġ- 1 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfn . invoke ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSERVER _ NAME Ġ= Ġ" server _ name " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOPER ATION Ġ= Ġ" http . client " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTATUS _ CODE Ġ= Ġ" status _ code " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREQUEST _ SIZE Ġ= Ġ" request Body Size " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRESP ONSE _ SIZE Ġ= Ġ" response Body Size " ĊĠĠĠ Ġ} Ċ } Ċ