package Ġcom . ribb ont ek . kotlin coroutines . service Ċ Ċ import Ġcom . ribb ont ek . kotlin coroutines . mapping . to Function Data Ċ import Ġcom . ribb ont ek . kotlin coroutines . util . logger Ċ import Ġcom . ribb ont ek . kotlin coroutines . util . to Pretty Json Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġjava . io . File Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ interface ĠStateful Service Ġ{ ĊĠĠĠ Ġfun Ġdisplay Results () ĊĠĠĠ Ġfun Ġreset () ĊĠĠĠ Ġfun Ġput ( function Name : ĠString , Ġtime Millis : ĠLong ) ĊĠĠĠ Ġfun Ġprint Results ( fileName Suffix : ĠString Ġ= Ġ"- results ") Ċ } Ċ Ċ @ Service Ċ class ĠStateful ServiceImpl Ġ: ĠStateful Service Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġfunction Tim ings : ĠConcurrent HashMap < String , ĠMutable List < Long >> Ġ= ĠConcurrent HashMap () ĊĠĠĠ Ġprivate Ġval Ġlog : ĠLogger Ġ= Ġlogger () ĊĊĠĠĠ Ġoverride Ġfun Ġdisplay Results () Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . info ( display Wrapper ( function Tim ings . to Function Data (). to Pretty Json ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġfunction Tim ings . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput ( function Name : ĠString , Ġtime Millis : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfunction Tim ings [ function Name ]?. add ( time Millis ) Ġ?: Ġfunction Tim ings . put ( function Name , Ġmutable ListOf ( time Millis )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdisplay Wrapper ( content : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ""" Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| **************************************** ******* ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠResults : ĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ$ content ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| **************************************** ******* ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprint Results ( fileName Suffix : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfunction Tim ings . take If Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . also Ġ{ Ġresults Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġ"${ LocalDateTime . now (). toString () Ġ+ ĠfileName Suffix }. json " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Content Ġ= Ġresults . to Function Data (). to Pretty Json (). toByteArray ( Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( File (" files ")) Ġ{ Ġif Ġ(! exists ()) Ġmkdir () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile (" files /$ fileName "). write Bytes ( file Content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Saved Ġresults Ġto Ġ$ fileName ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" en counter ed Ġex : Ġ", Ġex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ