package Ġru . m 2 . sentry Ċ Ċ import Ġio . grpc . Context Ċ import Ġio . grpc . Metadata . ASCII _ STRING _ MAR SH ALL ER Ċ import Ġio . grpc . Metadata . Key Ċ import Ġio . grpc . Server Call Ċ import Ġio . sentry . Breadcrumb Ċ import Ġio . sentry . S entry Ċ import Ġio . sentry . protocol . User Ċ import Ġorg . slf 4 j . M DC Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠExtra Info Collector () Ġ{ ĊĊĠĠĠ Ġfun Ġrecord Message ( message : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord (" message ", Ġmessage ?. toString () Ġ?: Ġ"") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Event ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord Breadcrumb ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrecord Metadata ( metadata : Ġio . grpc . Metadata ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( key Ġin Ġmetadata . keys ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecord ( key , Ġmetadata . getAll ( Key . of ( key , ĠASCII _ STRING _ MAR SH ALL ER )) ?. join ToString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key . lowercase () Ġ== Ġ" x - b 3 - trace id ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata . getAll ( Key . of ( key , ĠASCII _ STRING _ MAR SH ALL ER )) ?. join ToString ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecord Tag (" x - trace - id ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrecord User ( metadata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< Req T , ĠResp T > Ġrecord Call Data ( call : ĠServer Call < Req T , ĠResp T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord (" call - add ressed ", Ġcall . authority ) ĊĠĠĠĠĠĠĠ Ġwith ( call . method Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecord (" service ", Ġthis . serviceName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecord (" method ", Ġthis . full MethodName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġattributes Ġ= Ġcall . attributes ĊĠĠĠĠĠĠĠ Ġ// since Ġthere Ġwere Ġno Ġpoint Ġin Ġvisibility - restriction Ġattributes Ġcontent ĊĠĠĠĠĠĠĠ Ġ// but Ġfor Ġsome Ġreason Ġthey Ġstill Ġdeprec ate Ġthis Ġmethod ĊĠĠĠĠĠĠĠ Ġfor Ġ( key Ġin Ġattributes . keys ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecord ( key . toString (), Ġattributes [ key ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrecord User ( metadata : Ġio . grpc . Metadata ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠuserId : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġmetadata . getAll ( Key . of (" x - user - id ", ĠASCII _ STRING _ MAR SH ALL ER )) ?. join ToString ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġusername : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġmetadata . getAll ( Key . of (" x - username ", ĠASCII _ STRING _ MAR SH ALL ER )) ?. join ToString ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġemail : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġmetadata . getAll ( Key . of (" x - user - email ", ĠASCII _ STRING _ MAR SH ALL ER )) ?. join ToString ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġip : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġmetadata . getAll ( Key . of (" x - real - ip ", ĠASCII _ STRING _ MAR SH ALL ER )) ?. join ToString ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġip Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠuserData Ġ= Ġmetadata . keys () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . lowercase (). startsWith (" x - user - data - ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. associate With Ġ{ Ġmetadata . getAll ( Key . of ( it , ĠASCII _ STRING _ MAR SH ALL ER )) ?. join ToString () !! Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠUser () ĊĠĠĠĠĠĠĠ Ġuser . id Ġ= ĠuserId ĊĠĠĠĠĠĠĠ Ġuser . username Ġ= Ġusername ĊĠĠĠĠĠĠĠ Ġuser . ipAddress Ġ= Ġip ĊĠĠĠĠĠĠĠ Ġuser . email Ġ= Ġemail ĊĠĠĠĠĠĠĠ Ġuser . others Ġ= ĠuserData ĊĊĠĠĠĠĠĠĠ ĠS entry . configure Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . user Ġ= Ġuser ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrecord ( key : ĠString , Ġvalue : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue . let Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS entry . configure Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Extra ( key , Ġv . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrecord Tag ( key : ĠString , Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠS entry . configure Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setTag ( key , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrecord Breadcrumb ( value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠS entry . configure Scope Ġ{ Ġscope Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope . add Breadcrumb ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB readcrumb . error ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġit . category Ġ= Ġ Ġ" rpc Ġcall Ġprocessing "} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrecord Context ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" deadline Remaining Ms ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . deadline ?. time Remaining ( TimeUnit . MILLISECONDS )?. toString () Ġ?: Ġ"- 1 " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠS entry . configure Scope Ġ{ Ġscope Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM DC . get Copy Of Context Map ()?. forEach Ġ{ Ġ( key , Ġvalue ) Ġ-> Ġscope . set Extra ( key , Ġvalue ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ