/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 - 2 0 2 1 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġgithub . n sk v ort so v . team city . cleanup Ċ Ċ import Ġjet brains . build Server . agent . Directory Clean ers Provider Ċ import Ġjet brains . build Server . agent . Directory Clean ers Provider Context Ċ import Ġjet brains . build Server . agent . Directory Clean ers Registry Ċ import Ġjet brains . build Server . util . File Util Ċ import Ġjet brains . build Server . util . Time Service Ċ import Ġorg . apache . log 4 j . Logger Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠMaven Cache Clean er Provider Ġ: ĠDirectory Clean ers Provider Ġ{ ĊĊĠĠĠ Ġvar Ġlog Ġ= ĠLogger . getLogger ( Maven Cache Clean er Provider :: class . java ) ĊĊĠĠĠ Ġoverride Ġfun Ġregister Directory Clean ers ( context : ĠDirectory Clean ers Provider Context , Ġregistry : ĠDirectory Clean ers Registry ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" Maven Ġcache Ġcleaner : Ġregister Ġdir Ġclean ers ") ĊĠĠĠĠĠĠĠ Ġval Ġdisabled Ġ= Ġcontext . has Explicit False (" team city . clean ers . maven . enabled ") ĊĠĠĠĠĠĠĠ Ġif Ġ( disabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Maven Ġrepository Ġcleaner Ġis Ġdisabled , Ġskipping .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠSystem . getProperty (" user . home ") ?. let Ġ{ Ġhome Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm 2 repo Ġ= ĠFile ("$ home /. m 2 / repository ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Checking Ġif Ġ[ ${ m 2 repo . absolute Path }] Ġexists ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m 2 repo . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Maven Ġcache Ġfound , Ġregistering Ġcleaner .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregistry . add Clean er ( m 2 repo , ĠDate (), ĠClean er ( m 2 repo , Ġlog )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Clean er Name () Ġ= Ġ" Maven Ġlocal Ġcache Ġcleaner " Ċ } Ċ Ċ class ĠGradle Cache Clean er Provider ( private Ġval ĠTime Service : ĠTime Service ) Ġ: ĠDirectory Clean ers Provider Ġ{ ĊĊĠĠĠ Ġval Ġlog Ġ= ĠLogger . getLogger ( Gradle Cache Clean er Provider :: class . java ) ĊĊĠĠĠ Ġoverride Ġfun Ġregister Directory Clean ers ( context : ĠDirectory Clean ers Provider Context , Ġregistry : ĠDirectory Clean ers Registry ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" Gradle Ġcleaner : Ġregister Ġdir Ġclean ers ") ĊĠĠĠĠĠĠĠ Ġval Ġdisabled Ġ= Ġcontext . has Explicit False (" team city . clean ers . gradle . enabled ") ĊĠĠĠĠĠĠĠ Ġif Ġ( disabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Gradle Ġcleaner Ġis Ġdisabled , Ġskipping ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠSystem . getProperty (" user . home ") ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgradle Cache Ġ= ĠFile ( it Ġ+ Ġ"/ . gradle / cache s ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Checking Ġif Ġ[ ${ gradle Cache . absolute Path }] Ġexists ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( gradle Cache . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Gradle Ġcache Ġfound , Ġregistering Ġcleaner .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregistry . add Clean er ( gradle Cache , ĠDate (), ĠClean er ( gradle Cache , Ġlog )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwrapper Cache Ġ= ĠFile ( it Ġ+ Ġ"/ . gradle / wrapper / dists ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Checking Ġif Ġ[ ${ wrapper Cache . absolute Path }] Ġexists ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( wrapper Cache . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Gradle Ġwrapper Ġdistributions Ġfound , Ġregistering Ġcleaner .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregistry . add Clean er ( wrapper Cache , ĠDate (), ĠClean er ( wrapper Cache , Ġlog )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdaemon Logs Ġ= ĠFile ( it Ġ+ Ġ"/ . gradle / daemon ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Looking Ġfor ĠGradle Ġdaemon Ġlogs .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠTime Service . now () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( daemon Logs . list Files () Ġ?: Ġempty Array ()). filter Ġ{ Ġdir Ġ-> Ġdir . isDirectory Ġ}. forEach Ġ{ Ġdir Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis LogFile : Ġ( File ) Ġ-> ĠBoolean Ġ= Ġ{ Ġfile Ġ-> Ġfile . name . endsWith (" out . log ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogs Ġ= Ġ( dir . list Files () Ġ?: Ġempty Array ()). filter ( is LogFile ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLet 's Ġsplit Ġlogs Ġand Ġregister Ġseveral Ġclean ers : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġ* Ġolder Ġthan Ġ 7 Ġdays ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġ* Ġolder Ġthan Ġ 1 Ġday ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġ* Ġolder Ġthan Ġ 1 2 Ġhours ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġ* Ġeach Ġone Ġelse Ġas Ġseparate Ġcleaner ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgroups Ġ= Ġsplit Log Files ( logs , Ġnow ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" NAME _ SH ADO WING ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( type , Ġlogs ) Ġin Ġgroups . entries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠLog Age . F RESH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġregister Ġeach Ġfile Ġseparately ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogs . forEach Ġ{ Ġlog Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregistry . add Clean er ( log , ĠDate ( log . lastModified ()), ĠLog File Clean er ( log , Ġdir )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġregister Ġgroup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregistry . add Clean er ( dir , ĠDate ( now Ġ- Ġtype . millis ), ĠLog Group Clean er ( logs , Ġdir )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( groups . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Finished , Ġfound Ġand Ġregistered Ġfor Ġcleaning Ġ$ count Ġdaemon Ġdirectories ") ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Clean er Name () Ġ= Ġ" Gradle Ġlocal Ġcache Ġcleaner " Ċ } Ċ Ċ private Ġenum Ġclass ĠLog Age ( private Ġval Ġoffset : ĠLong ) Ġ{ ĊĠĠĠ ĠO L DER _ THAN _ 7 D ( 7 Ġ* Ġ 2 4 ), ĊĠĠĠ ĠO L DER _ THAN _ 2 4 H ( 2 4 ), ĊĠĠĠ ĠO L DER _ THAN _ 1 2 H ( 1 2 ), ĊĠĠĠ ĠF RESH ( 0 ); ĊĊĠĠĠ Ġval Ġmillis : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTimeUnit . HOUR S . to Millis ( offset ) ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġsplit Log Files ( logs : ĠList < File >, Ġnow : ĠLong ): ĠMap < Log Age , ĠList < File >> Ġ{ ĊĠĠĠ Ġreturn Ġlogs . groupBy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= Ġnow Ġ- Ġit . lastModified () ĊĠĠĠĠĠĠĠ ĠLog Age . values (). first OrNull Ġ{ Ġage Ġ-> Ġdiff Ġ> Ġage . millis Ġ} Ġ?: ĠLog Age . F RESH ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠLog Group Clean er ( private Ġval Ġlogs : ĠList < File >, Ġprivate Ġval Ġdir : ĠFile ) Ġ: ĠRunnable Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ ĠFile Util . delete Files ( logs ) ĊĠĠĠĠĠĠĠ Ġif Ġ( dir . list ()?. isEmpty () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Util . delete ( dir ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ private Ġclass ĠLog File Clean er ( private Ġval Ġlog : ĠFile , Ġprivate Ġval Ġdir : ĠFile ) Ġ: ĠRunnable Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ ĠFile Util . delete ( log ) ĊĠĠĠĠĠĠĠ Ġif Ġ( dir . list ()?. isEmpty () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Util . delete ( dir ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ fun ĠDirectory Clean ers Provider Context . has Explicit False ( key : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġstr Value Ġ= Ġrunning Build . shared Config Parameters [ key ] ĊĠĠĠ Ġreturn Ġstr Value ?. equals (" false ", Ġignore Case Ġ= Ġtrue ) Ġ?: Ġfalse Ċ } Ċ Ċ class ĠClean er ( private Ġval Ġdir : ĠFile , Ġprivate Ġval Ġlog : ĠLogger ) Ġ: ĠRunnable Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" Removing Ġ${ dir . absolute Path }") ĊĠĠĠĠĠĠĠ Ġval Ġdir Old Ġ= ĠFile ("$ dir . old ") ĊĠĠĠĠĠĠĠ Ġval Ġmoved Successfully Ġ= ĠFile Util . move Dir With Content ( dir , Ġdir Old , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġlog . info (" Failed Ġto Ġrename Ġto Ġ${ dir Old . name }: Ġ$ it ") Ġ}) ĊĠĠĠĠĠĠĠ Ġif Ġ( moved Successfully ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Rename Ġsuccessful , Ġdeleting Ġ${ dir Old . name }") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Util . delete ( dir Old ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ