package Ġdb . f enn ec . api . web . rest Ċ Ċ import Ġcom . co da h ale . metrics . Meter Ċ import Ġcom . co da h ale . metrics . Timer Ċ import Ġdb . f enn ec . api . web . View Ċ import Ġdb . f enn ec . driver . Driver Metric Ċ import Ġdb . f enn ec . driver . F enn ec Driver Ċ import Ġio . vertx . ext . web . Routing Context Ċ import Ġj 2 html . Tag Creator .* Ċ import Ġjava . time . Instant Ċ import Ġjava . util . Enum Map Ċ import Ġj 2 html . Tag Creator . attrs Ċ import Ġj 2 html . tags . Dom Content Ċ import Ġorg . apache . commons . io . FileUtils Ċ import Ġjava . io . File Ċ import Ġjava . lang . Append able Ċ import Ġkotlin . math . round ToInt Ċ Ċ class ĠDashboard View ( val Ġdriver : ĠF enn ec Driver ) Ġ: ĠView Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġu ptime Ġ= ĠInstant . now () ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠDash Entry ( val Ġlabel : ĠString , Ġval Ġreq Meter : ĠMeter ?, Ġval Ġtimer : ĠTimer ?) Ġ: ĠDom Content () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrender Model ( writer : ĠAppend able ?, Ġmodel : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimer !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( timer . snapshot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter ?. append ( tr ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ( label ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ("${ round To Decimal s ( req Meter !!. one Minute Rate , Ġ 4 )} "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ("${ min . nano To Ms (). round ToInt ()} "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ("${ max . nano To Ms (). round ToInt ()} "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ("${ mean . f Nano To Ms (). round ToInt ()} "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ("${ median . f Nano To Ms (). round ToInt ()} "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd ("${ std Dev . f Nano To Ms (). round ToInt () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). render ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠLong . nano To Ms (): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis Ġ/ Ġ 1 0 0 0 0 0 0 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠDouble . f Nano To Ms (): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis Ġ/ Ġ 1 0 0 0 0 0 0 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Entries (): ĠArray < Dash Entry > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmeters Ġ= Ġdriver . meters () ĊĠĠĠĠĠĠĠ Ġval Ġtimers Ġ= Ġdriver . timers () ĊĠĠĠĠĠĠĠ Ġval Ġentries Ġ= Ġarray ListOf < Dash Entry >() ĊĠĠĠĠĠĠĠ Ġentries . add ( Dash Entry (" insert ", Ġmeters [ Driver Metric . INSERT _ REQ ], Ġtimers [ Driver Metric . INSERT _ TIME ])) ĊĠĠĠĠĠĠĠ Ġentries . add ( Dash Entry (" query ", Ġmeters [ Driver Metric . QUERY _ REQ ], Ġtimers [ Driver Metric . QUERY _ TIME ])) ĊĠĠĠĠĠĠĠ Ġreturn Ġentries . to Typed Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrender ( routing Context : ĠRouting Context ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFileUtils . readFile ToString ( File ("./ dashboard / index . html ")) Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġhtml ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhead ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle (" Dashboard Ġ- ĠF enn ec "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink (). with Rel (" stylesheet "). with Href ("/ style / main . css "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink (). with Rel (" stylesheet "). with Href (" https :// fonts . googleapis . com / css ? family = Noto + Sans ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader (" F enn ec ĠDashboard "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain ( attrs ("# main . content "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh 3 (" Up Ġsince Ġ$ uptime ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). with Classes (" block ", Ġ" block - mar "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiv ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh 3 (" Endpoints "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtr ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd (" Operation "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd (" M 1 "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd (" Min Ġ( ms )"), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd (" Max Ġ( ms )"), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd (" Mean Ġ( ms )"), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd (" Median Ġ( ms )"), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtd (" Std Dev Ġ( ms )") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* generate Entries () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). with Class (" metric ") Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġul ( Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġli (). with Text ("- Ġquery : Ġ${ meters . meter ( Driver Metric . QUERY _ REQ )} Ġreq / s "), Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġli (). with Text ("- Ġinsert : Ġ${ meters . meter ( Driver Metric . INSERT _ REQ )} Ġreq / s Ġ(${ timers . time ( Driver Metric . INSERT _ TIME )}) "), Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġli (). with Text ("- Ġupsert : Ġ${ meters . meter ( Driver Metric . UP SERT _ REQ )} Ġreq / s "), Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġli (). with Text ("- Ġremove : Ġ${ meters . meter ( Driver Metric . REMOVE _ REQ )} Ġreq / s "), Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġli (). with Text ("- Ġremove ĠNS : Ġ${ meters . meter ( Driver Metric . REMOVE _ NS _ REQ )} Ġreq / s ") Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). with Classes (" block ", Ġ" block - yel ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠ Ġ). render () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġround To Decimal s ( number : ĠDouble , Ġnum Decimal Places : ĠInt ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfactor Ġ= ĠMath . pow ( 1 0 . 0 , Ġnum Decimal Places . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMath . round ( number Ġ* Ġfactor ) Ġ/ Ġfactor ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊ Ċ } Ċ