/** Ċ Ġ* Ġ" Common s ĠClause " ĠLicense ĠCondition Ġv 1 . 0 Ċ Ġ* Ċ Ġ* ĠThe ĠSoftware Ġis Ġprovided Ġto Ġyou Ġby Ġthe ĠLic ensor Ġunder Ġthe ĠLicense , Ġas Ġdefined Ċ Ġ* Ġbelow , Ġsubject Ġto Ġthe Ġfollowing Ġcondition . Ċ Ġ* Ċ Ġ* ĠWithout Ġlimiting Ġother Ġconditions Ġin Ġthe ĠLicense , Ġthe Ġgrant Ġof Ġrights Ġunder Ġthe Ċ Ġ* ĠLicense Ġwill Ġnot Ġinclude , Ġand Ġthe ĠLicense Ġdoes Ġnot Ġgrant Ġto Ġyou , Ġthe Ġright Ġto Ċ Ġ* ĠS ell Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠFor Ġpurposes Ġof Ġthe Ġfore going , ĠâĢľ Sell âĢĿ Ġmeans Ġpract icing Ġany Ġor Ġall Ġof Ġthe Ġrights Ċ Ġ* Ġgranted Ġto Ġyou Ġunder Ġthe ĠLicense Ġto Ġprovide Ġto Ġthird Ġparties , Ġfor Ġa Ġfee Ġor Ċ Ġ* Ġother Ġconsideration Ġ( including Ġwithout Ġlimitation Ġfees Ġfor Ġhosting Ġor Ċ Ġ* Ġconsult ing / Ġsupport Ġservices Ġrelated Ġto Ġthe ĠSoftware ), Ġa Ġproduct Ġor Ġservice Ċ Ġ* Ġwhose Ġvalue Ġder ives , Ġentirely Ġor Ġsubstant ially , Ġfrom Ġthe Ġfunctionality Ġof Ġthe Ċ Ġ* ĠSoftware . ĠAny Ġlicense Ġnotice Ġor Ġat tribution Ġrequired Ġby Ġthe ĠLicense Ġmust Ġalso Ċ Ġ* Ġinclude Ġthis ĠCommons ĠClause ĠLicense ĠCondition Ġnotice . Ċ Ġ* Ċ Ġ* ĠSoftware : ĠInf init ic Ċ Ġ* Ċ Ġ* ĠLicense : ĠMIT ĠLicense Ġ( https :// opensource . org / licenses / MIT ) Ċ Ġ* Ċ Ġ* ĠLic ensor : Ġinf init ic . io Ċ Ġ*/ Ċ Ċ package Ġio . inf init ic . dashboard . panels . infrastructure Ċ Ċ import Ġio . inf init ic . dashboard . panels . infrastructure . requests . Completed Ċ import Ġio . inf init ic . dashboard . panels . infrastructure . requests . Failed Ċ import Ġio . inf init ic . dashboard . panels . infrastructure . requests . Loading Ċ import Ġio . inf init ic . dashboard . panels . infrastructure . requests . Request Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . isActive Ċ import Ġkotlinx . coroutines . launch Ċ import Ġk web . state . K Var Ċ import Ġmu . Kotlin Logging Ċ import Ġorg . apache . pulsar . common . policies . data . Partition ed Topic Stats Ċ import Ġjava . time . Instant Ċ Ċ private Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} Ċ Ċ private Ġconst Ġval ĠNAMES _ DELAY Ġ= Ġ 3 0 0 0 0 L Ċ private Ġconst Ġval ĠSTAT S _ DELAY Ġ= Ġ 5 0 0 0 L Ċ Ċ type alias ĠJob Stats Ġ= ĠMap < String , ĠRequest < Partition ed Topic Stats >> Ċ type alias ĠJob Names Ġ= ĠRequest < Set < String >> Ċ Ċ abstract Ġclass ĠAll Jobs State ( ĊĠĠĠ Ġopen Ġval Ġnames : ĠJob Names , ĊĠĠĠ Ġopen Ġval Ġstats : ĠJob Stats , Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠisLoading ( names : ĠJob Names , Ġstats : ĠJob Stats ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstats . any Ġ{ Ġit . value . isLoading Ġ} Ġ|| Ġnames . isLoading ĊĊĠĠĠĠĠĠĠ Ġfun Ġlast UpdatedAt ( names : ĠJob Names , Ġstats : ĠJob Stats ): ĠInstant Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnames Last Updated Ġ= Ġnames . last Updated ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstats Last Updated Ġ= Ġstats . max Of OrNull Ġ{ Ġit . value . last Updated Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( stats Last Updated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġnames Last Updated ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġwhen Ġ( stats Last Updated . is After ( names Last Updated )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġstats Last Updated ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġnames Last Updated ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnames Loading () Ġ= Ġcreate ( names Ġ= Ġnames . copy Loading ()) ĊĠĠĠ Ġfun Ġstats Loading () Ġ= Ġcreate ( stats Ġ= Ġstats . map Values Ġ{ Ġit . value . copy Loading () Ġ}) ĊĊĠĠĠ Ġabstract Ġfun Ġcreate ( ĊĠĠĠĠĠĠĠ Ġnames : ĠJob Names Ġ= Ġthis . names , ĊĠĠĠĠĠĠĠ Ġstats : ĠJob Stats Ġ= Ġthis . stats ĊĠĠĠ Ġ): ĠAll Jobs State ĊĊĠĠĠ Ġabstract Ġfun Ġget Names (): ĠSet < String > ĊĠĠĠ Ġabstract Ġfun Ġget Partition ed Stats ( name : ĠString ): ĠPartition ed Topic Stats Ċ } Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ fun Ġ< T Ġ: ĠAll Jobs State > ĠCor outine Scope . update ( k var : ĠK Var < T >) Ġ= Ġlaunch Ġ{ ĊĠĠĠ Ġwhile Ġ( isActive ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( k var ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnames Delay Ġ= Ġlaunch Ġ{ Ġdelay ( NAMES _ DELAY ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdate Ġtask Ġnames Ġevery ĠNAMES _ UPDATE _ DELAY Ġmillis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Updating Ġnames " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġloading Ġindicator ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġvalue . names Loading () Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrequest ĠP ul sar ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnames Ġ= Ġvalue . get Names () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġvalue . create ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnames Ġ= ĠCompleted ( names ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstats Ġ= Ġnames . associate With Ġ{ Ġvalue . stats . get OrDefault ( it , ĠLoading ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġvalue . create ( names Ġ= ĠFailed ( e ), Ġstats Ġ= Ġmap Of (), ) Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdate Ġtask Ġstats Ġevery ĠSTAT S _ UPDATE _ DELAY Ġmillis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġnames Ġ= Ġvalue . names ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCompleted Ġ-> Ġwhile Ġ( names Delay . isActive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelay Stats Ġ= Ġlaunch Ġ{ Ġdelay ( STATS _ DELAY ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġloading Ġindicator ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġvalue . stats Loading () Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdate Ġstats ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstats Ġ= Ġmutable Map Of < String , ĠRequest < Partition ed Topic Stats >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnames . result . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Updating Ġexecutor Ġstats Ġfor Ġ$ it " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstats [ it ] Ġ= ĠCompleted ( value . get Partition ed Stats ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstats [ it ] Ġ= ĠFailed ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdate Ġarray Ġof Ġstats ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġvalue . create ( stats Ġ= Ġstats ) Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwait Ġat Ġleast Ġdelay Stats ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay Stats . join () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnames Delay . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( STATS _ DELAY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ