package Ġno . nav . hel se . cli Ċ Ċ import Ġcom . fasterxml . jackson . databind . JsonNode Ċ import Ġcom . fasterxml . jackson . databind . Serialization Feature Ċ import Ġcom . fasterxml . jackson . module . kotlin . jackson ObjectMapper Ċ import Ġno . nav . hel se . cli . operations . find Offsets Ċ import Ġno . nav . hel se . cli . operations . get Partitions Ċ import Ġno . nav . rap ids _ and _ river s . cli . Consumer Producer Factory Ċ import Ġno . nav . rap ids _ and _ river s . cli . Json R iver Ċ import Ġno . nav . rap ids _ and _ river s . cli . R ap ids Cli Application Ċ import Ġorg . apache . kafka . clients . admin . Offset Spec Ċ import Ġorg . apache . kafka . clients . consumer . Consumer Record Ċ import Ġorg . apache . kafka . common . Topic Partition Ċ import Ġjava . time . Duration Ċ import Ġjava . time . Instant Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Zone Id Ċ import Ġkotlin . random . Random Ċ Ċ internal Ġclass ĠTrace Command Ġ: ĠCommand Ġ{ ĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ DEPTH Ġ= Ġ 3 ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġval Ġname Ġ= Ġ" trace " ĊĊĠĠĠ Ġoverride Ġfun Ġusage () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Usage : Ġ$ name Ġ< topic > Ġ< id > Ġ[< depth >] Ġ[< from Ġtimestamp >] ") ĊĠĠĠĠĠĠĠ Ġprintln (" If Ġ< depth > Ġis Ġunset , Ġthe Ġdefault Ġis Ġto Ġtrace Ġa Ġmessage Ġwith Ġdepth =$ DEFAULT _ DEPTH ") ĊĠĠĠĠĠĠĠ Ġprintln (" If Ġ< from Ġtimestamp > Ġis Ġunset , Ġthe Ġdefault Ġis Ġto Ġlook Ġback Ġlast Ġtwo Ġhours ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexecute ( factory : ĠConsumer Producer Factory , Ġargs : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( args . size Ġ< Ġ 2 ) Ġthrow ĠRuntimeException (" Missing Ġrequired Ġtopic Ġor Ġid Ġarg ") ĊĠĠĠĠĠĠĠ Ġval Ġtopic Ġ= Ġargs [ 0 ] ĊĠĠĠĠĠĠĠ Ġval ĠmessageId Ġ= Ġargs [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġdepth Ġ= Ġargs . get OrNull ( 2 )?. toInt OrNull () Ġ?: ĠDEFAULT _ DEPTH ĊĠĠĠĠĠĠĠ Ġval Ġtime Ġ= Ġargs . get OrNull ( 3 )?. let Ġ{ ĠLocalDateTime . parse ( it ) Ġ} Ġ?: ĠLocalDateTime . now (). minus Hours ( 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġtimestamp Ġ= Ġtime . at Zone ( Zone Id . system Default ()). to Instant (). to Epoch Milli () ĊĠĠĠĠĠĠĠ Ġval ĠgroupId Ġ= Ġ" bom li - cli -${ Random . nextInt () }" ĊĊĠĠĠĠĠĠĠ Ġprintln (" Consum ing Ġfrom Ġ$ topic Ġwith Ġconsumer Ġgroup Ġ$ groupId ") ĊĠĠĠĠĠĠĠ Ġprintln (" Will ĠNOT Ġbe Ġcommit ting Ġany Ġoffsets . ĠStarting Ġfrom Ġ$ time Ġwith Ġtimestamp Ġ= Ġ$ timestamp ") ĊĠĠĠĠĠĠĠ Ġval Ġadmin Client Ġ= Ġfactory . admin Client () ĊĊĠĠĠĠĠĠĠ Ġval Ġpartitions Ġ= Ġget Partitions ( admin Client , Ġtopic ) ĊĠĠĠĠĠĠĠ Ġval Ġlatest Offsets Ġ= Ġfind Offsets ( admin Client , Ġpartitions , ĠOffset Spec . latest ()) ĊĠĠĠĠĠĠĠ Ġval Ġoffsets For Time Ġ= Ġfind Offsets ( admin Client , Ġpartitions , ĠOffset Spec . for Timestamp ( timestamp )) ĊĠĠĠĠĠĠĠ Ġval Ġup ToDate Ġ= Ġlatest Offsets . map Values Ġ{ Ġfalse Ġ}. to Mutable Map () ĊĊĠĠĠĠĠĠĠ Ġvar Ġroot Message : ĠMessage ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ ĠR ap ids Cli Application ( factory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġcapture Ġroot Ġmessage Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson R iver ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. validate Ġ{ Ġ_, Ġ_, Ġ_ Ġ-> Ġroot Message Ġ== Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. validate Ġ{ Ġ_, Ġnode , Ġ_ Ġ-> Ġnode . path ("@ id "). as Text () Ġ== ĠmessageId Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Message Ġ{ Ġrecord , Ġnode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Found Ġmessage Ġat Ġpartition =${ record . partition ()}, Ġoffset Ġ= Ġ${ record . offset () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Message Ġ= ĠMessage ( record , Ġnode , ĠmessageId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( root Message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġcapture Ġall Ġchild Ġ( or Ġchild Ġof Ġchildren âĢ¦ ) Ġmessages Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson R iver ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. validate Ġ{ Ġ_, Ġnode , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ== Ġroot Message ?. er B arn Av ( node . path ("@ for Ã¥ rs aket _ av "). path (" id "). as Text (), Ġdepth ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġtrue Ġ== Ġroot Message ?. er B arn Av ( node . path ("@ id "). as Text (), Ġdepth ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġ( node . path ("@ event _ name "). as Text () Ġin Ġset Of (" op pg ave _ op prett et ", Ġ" s aks be handler _ l Ã¸ s ning ") Ġ&& Ġtrue Ġ== Ġroot Message ?. er B arn Av ( node . path (" hen del se Id "). as Text (), Ġdepth )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Message Ġ{ Ġrecord , Ġnode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠparentId Ġ= Ġnode . path ("@ for Ã¥ rs aket _ av "). path (" id "). as Text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠMessage ( record , Ġnode , Ġnode . path ("@ id "). as Text ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( true Ġ== Ġroot Message ?. leg g Til ( parentId , Ġmessage )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( message . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġtrigger Ġshutdown Ġwhen Ġall Ġpartitions Ġhave Ġbeen Ġread Ġup Ġto Ġthe Ġpoint Ġcollecting Ġin Ġ$ latest Offsets Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshutdown R iver Ġ= ĠJson R iver ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshutdown R iver . on Message Ġ{ Ġrecord , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup ToDate . compute ( Topic Partition ( record . topic (), Ġrecord . partition ())) Ġ{ Ġtopic Partition , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecord . offset () Ġ>= Ġlatest Offsets . getValue ( topic Partition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( up ToDate . values . all Ġ{ Ġit Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Whole Ġtopic Ġread , Ġexiting ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunregister ( shutdown R iver ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Shutdown Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( root Message ?. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. partitions Assigned First Time Ġ{ Ġconsumer , Ġpartitions Assigned Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpartitions Assigned . forEach Ġ{ Ġpartition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumer . seek ( partition , Ġoffsets For Time . getValue ( partition )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. start ( groupId , ĠlistOf ( topic )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠMessage ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġrecord : ĠConsumer Record < String , ĠString >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnode : ĠJsonNode , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġid : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġparents Ġ= Ġmutable ListOf < Message >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdepth Ġget () Ġ= Ġparents . size ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠeventName Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . has NonNull ("@ be h ov ")) Ġbeh ov Name ( node . path ("@ be h ov "). join ToString ( transform Ġ= ĠJsonNode :: as Text )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġnode . path ("@ event _ name "). as Text () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġextra Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! node . has NonNull ("@ be h ov ")) Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( node . path ("@ final "). as Boolean ()) Ġ" Ġ( FINAL )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ(! node . path ("@ l Ã¸ s ning "). isEmpty ) Ġ" Ġ( DE LL Ã ĺ S NING )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ" Ġ( UT G Ã ħ EN DE ĠBE HO V )" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsender Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode . path (" system _ part icip ating _ services "). last OrNull ()?. path (" instance ") ?. as Text ()?. let Ġ{ Ġ" sender : Ġ$ it , Ġ" Ġ} Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġproduced Ġby Ġlazy Ġ{ ĠInstant . of Epoch Milli ( record . timestamp ()). at Zone ( Zone Id . system Default ()). to LocalDateTime () Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġchildren Ġ= Ġmutable ListOf < Message >() ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbeh ov Name ( be h ov : ĠString ) Ġ= Ġwhen Ġ( be h ov ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Fore ld rep enger , ĠP le i ep enger , ĠO ms org sp enger , ĠOp pl Ã¦ ring sp enger , ĠInst it us j ons op ph old , ĠAr be ids av k lar ing sp enger , ĠD ag p enger , ĠD Ã¸ ds info " Ġ-> Ġ" Y tel ser Ġ( uten Ġsy ke pen ge h istor ikk )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sy ke pen ge h istor ikk , ĠFore ld rep enger , ĠP le i ep enger , ĠO ms org sp enger , ĠOp pl Ã¦ ring sp enger , ĠInst it us j ons op ph old , ĠAr be ids av k lar ing sp enger , ĠD ag p enger , ĠD Ã¸ ds info " Ġ-> Ġ" Y tel ser Ġ( med Ġsy ke pen ge h istor ikk )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" In n tek ter For Sy ke pen ge gr un nl ag , ĠAr be ids for hold V 2 , ĠIn n tek ter For Sam men l ign ings gr un nl ag , ĠMed lems kap " Ġ-> Ġ" V ilk Ã¥ rs gr un nl ag " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġbeh ov ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġer B arn Av ( other Id : ĠString , Ġdepth : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( depth Ġ< Ġ 0 ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . id Ġ== Ġother Id ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match Again st S aks be handler l Ã¸ s ning Or Opp g ave ( other Id )) Ġreturn Ġtrue Ġ// Ġweird ness Ġfor Ġmatching ĠGod k jen ning - solution Ġagainst Ġs aks be handler _ l Ã¸ s ning ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchildren . any Ġ{ Ġit . er B arn Av ( other Id , Ġdepth Ġ- Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġle gg Til ( parentId : ĠString , Ġmessage : ĠMessage ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . id Ġ== ĠparentId ) Ġreturn Ġadd ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( children . reversed (). any Ġ{ Ġit . leg g Til ( parentId , Ġmessage ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . parents . add ( 0 , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match Again st S aks be handler l Ã¸ s ning Or Opp g ave ( message . id )) Ġreturn Ġadd ( message ) Ġ// Ġweird ness Ġfor Ġmatching ĠGod k jen ning - solution Ġagainst Ġs aks be handler _ l Ã¸ s ning ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( message . match Again st S aks be handler l Ã¸ s ning Or Opp g ave ( this . id )) Ġreturn Ġadd ( message ) Ġ// Ġweird ness Ġfor Ġmatching Ġs aks be handler _ l Ã¸ s ning Ġagainst ĠGod k jen ning - need ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġadd ( other : ĠMessage ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother . parents . add ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchildren . add ( other ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġmatch Again st S aks be handler l Ã¸ s ning Or Opp g ave ( id : ĠString ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . eventName Ġin Ġset Of (" op pg ave _ op prett et ", Ġ" s aks be handler _ l Ã¸ s ning ") Ġ&& Ġid Ġ== Ġthis . node . path (" hen del se Id "). as Text () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdecode (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . has NonNull (" ved tak sp eri ode Id ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" ved tak sp eri ode Id : Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( node . path (" ved tak sp eri ode Id "). as Text ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . has NonNull (" ut bet aling Id ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" ut bet aling Id : Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( node . path (" ut bet aling Id "). as Text ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( eventName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ved tak sp eri ode _ end ret " Ġ-> Ġsb . append ( node . path (" for ri ge Til stand "). as Text ()). append (" Ġ-> Ġ"). append ( node . path (" gj el den de Til stand "). as Text ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ut bet aling _ end ret " Ġ-> Ġsb . append ( node . path (" for ri ge Status "). as Text ()). append (" Ġ-> Ġ"). append ( node . path (" gj el den de Status "). as Text ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" God k jen ning " Ġ-> Ġnode . path ("@ l Ã¸ s ning "). path (" God k jen ning "). take Unless Ġ{ Ġit . is Missing Node Ġ|| Ġit . isNull Ġ} ?. let Ġ{ Ġl Ã¸ s ning Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" god kj ent : Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( l Ã¸ s ning . path (" god kj ent "). as Boolean ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( l Ã¸ s ning . path (" autom atis k Be handling "). as Boolean ()) Ġsb . append (" Ġ( autom atis k ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" U tb et aling " Ġ-> Ġnode . path ("@ l Ã¸ s ning "). path (" U tb et aling "). take Unless Ġ{ Ġit . is Missing Node Ġ|| Ġit . isNull Ġ} ?. let Ġ{ Ġl Ã¸ s ning Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( l Ã¸ s ning . path (" status "). as Text ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= ĠtoString ( depth , Ġparents . first OrNull ()?. pro duced ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠtoString ( depth : ĠInt , Ġroot Timestamp : ĠLocalDateTime ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= Ġroot Timestamp ?. let Ġ{ ĠDuration . between ( root Timestamp , Ġproduced ) Ġ} ?. let Ġ{ Ġduration Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ duration . to Minutes ()} Ġmin ( s ) Ġ${ duration . to Seconds Part ()} Ġsec ( s ) Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Ġ Ġ". repeat ( depth ) Ġ+ Ġ"> Ġ$ diff $ eventName $ extra Ġ( âĨ § Ġ$ depth ): Ġ$ id Ġ(${ sender } partition Ġ${ record . partition ()}, Ġoffset Ġ${ record . offset () }) Ġ${ decode ()} ${ children . join ToString ( separator Ġ= Ġ"") Ġ{ Ġ"\ n ${ it . toString ( depth Ġ+ Ġ 1 , Ġroot Timestamp Ġ?: Ġproduced ) Ġ}" Ġ}}" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġverify ( factory : ĠConsumer Producer Factory ) Ġ{} Ċ } Ċ