package Ġnet . fix ables . chi at r actor Ċ Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . file . FileSystem s Ċ import Ġkotlin . system . exit Process Ċ import Ġkotlin . time . Experimental Time Ċ import Ġkotlin . time . days Ċ import Ġkotlin . time . minutes ĊĊ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġprintln (" Starting Ġup Ġthe ĠCh ia ĠTr actor . ĠReading Ġplots , Ġthen Ġmonitoring .") ĊĊĠĠĠ Ġval Ġall Plot Logs Ġ= ĠPlot Log . load Logs () ĊĠĠĠ Ġval Ġcompleted Logs Ġ= Ġall Plot Logs . filter Is Instance < Completed Plot Log >() ĊĠĠĠ Ġprintln (" Found Ġ${ all Plot Logs . size } Ġtotal Ġlogs , Ġ${ completed Logs . size } Ġcompleted Ġlogs .") ĊĠĠĠ Ġcompletion Times ( completed Logs ) ĊĠĠĠ Ġparallel Rate ( completed Logs ) ĊĠĠĠ Ġ// Ġdump All Logs ( all Plot Logs ) ĊĊĠĠĠ Ġprint lnt (" Time MS ", Ġ" Store ", Ġ" type ", Ġ" total ", Ġ" used ", Ġ" avail ") ĊĊĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog File Store Space () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 5 . minutes ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġlog File Store Space () Ġ{ ĊĠĠĠ Ġval Ġnow Ġ= ĠSystem . currentTimeMillis () ĊĊĠĠĠ ĠPlot Log . load Logs () ĊĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġit Ġis ĠCompleted Plot Log Ġ} ĊĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġactive Plot Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Plot . p 4 Duration Ġ!= Ġnull Ġ-> Ġprint lnt Once ( now , Ġactive Plot . id , Ġactive Plot . temp Dir 2 , Ġ" p 4 done ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Plot . p 3 Duration Ġ!= Ġnull Ġ-> Ġprint lnt Once ( now , Ġactive Plot . id , Ġactive Plot . temp Dir 2 , Ġ" p 3 done ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Plot . p 2 Duration Ġ!= Ġnull Ġ-> Ġprint lnt Once ( now , Ġactive Plot . id , Ġactive Plot . temp Dir 1 , Ġ" p 2 done ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Plot . p 1 Duration Ġ!= Ġnull Ġ-> Ġprint lnt Once ( now , Ġactive Plot . id , Ġactive Plot . temp Dir 1 , Ġ" p 1 done ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ ĠFileSystem s . getDefault (). file Stores . forEach Ġ{ Ġstore Ġ-> ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal GB Ġ= Ġstore . total Space Ġ/ ĠBY TES _ GB ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( total GB Ġ> Ġ 5 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġused Ġ= Ġ( store . total Space Ġ- Ġstore . un allocated Space ) Ġ/ ĠBY TES _ GB ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġavail Ġ= Ġstore . usable Space Ġ/ ĠBY TES _ GB ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint lnt ( now , Ġstore , Ġstore . type (), Ġtotal GB , Ġused , Ġavail ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġskipping ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ /** Ċ Ġ* ĠA Ġfew Ġdays Ġso Ġwe Ġget Ġsome Ġsense Ġof Ġparallel Ġper Ġday Ċ Ġ*/ Ċ @ Opt In ( Experimental Time :: class ) Ċ private Ġfun Ġparallel Rate ( plot Logs : ĠCollection < Completed Plot Log >, ĠnumberOf Days : ĠInt Ġ= Ġ 3 ) Ġ{ ĊĠĠĠ Ġprintln () ĊĠĠĠ Ġprint lnt (" Temp ĠDir ", Ġ" plots / day Ġover Ġlast Ġ$ numberOf Days Ġdays ") ĊĠĠĠ Ġval Ġfew Days Ago Ms Ġ= ĠSystem . currentTimeMillis () Ġ- ĠnumberOf Days . days . in Milliseconds ĊĠĠĠ Ġplot Logs . filter Ġ{ Ġit . lastModified Ġ> Ġfew Days Ago Ms Ġ} ĊĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġit . temp Dir 1 Ġ} ĊĠĠĠĠĠĠĠ Ġ. to Sorted Map () ĊĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġ( tmp Dir 1 , Ġplots ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint lnt ( tmp Dir 1 , Ġplots . size Ġ/ ĠnumberOf Days . toDouble ()) ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠGeneric Ġtiming Ġper Ġplot Ċ Ġ*/ Ċ @ Opt In ( Experimental Time :: class ) Ċ private Ġfun Ġcompletion Times ( plot Logs : ĠCollection < Completed Plot Log >) Ġ{ ĊĠĠĠ Ġprintln () ĊĠĠĠ Ġprint lnt (" Temp ĠDir ", Ġ" Total ĠCompleted ", Ġ" Average Ġ( h )", Ġ" Most ĠRecent Ġ( h )") ĊĠĠĠ Ġplot Logs ĊĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġit . temp Dir 1 Ġ} ĊĠĠĠĠĠĠĠ Ġ. to Sorted Map () ĊĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġ( tmp Dir 1 , Ġplots ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġavg Ġ= Ġplots . map Ġ{ Ġit . total Duration . in Hours Ġ}. average () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmost Recent Ġ= Ġplots . max By OrNull Ġ{ Ġit . lastModified Ġ} !!. total Duration . in Hours ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint lnt ( tmp Dir 1 , Ġplots . size , Ġavg , Ġmost Recent ) ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġconst Ġval ĠBY TES _ KB Ġ= Ġ 1 0 2 4 L Ċ internal Ġconst Ġval ĠBY TES _ MB Ġ= ĠBY TES _ KB Ġ* ĠBY TES _ KB Ċ internal Ġconst Ġval ĠBY TES _ GB Ġ= ĠBY TES _ MB Ġ* ĠBY TES _ KB ĊĊĊĊ