/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . gradle . plugin . statistics Ċ Ċ import Ġorg . gradle . api . invocation . Gradle Ċ import Ġorg . gradle . tool ing . events . Finish Event Ċ import Ġorg . gradle . tool ing . events . Operation Completion Listener Ċ import Ġorg . gradle . tool ing . events . configuration . Project Configuration Finish Event Ċ import Ġorg . jetbrains . kotlin . statistics . Build Session Logger Ċ import Ġjava . lang . management . Management Factory Ċ import Ġjavax . management . MBean Server Ċ import Ġjavax . management . ObjectName Ċ Ċ open Ġclass ĠKotlin Build Stat Listener ( val Ġbean Name : ĠObject Name /* , Ġval Ġgradle : ĠGradle */) Ġ: ĠOperation Completion Listener , ĠAuto Closeable Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġproject Evalu ated Time : ĠLong ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Finish ( event : ĠFinish Event ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( event Ġis ĠProject Configuration Finish Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Evalu ated Time Ġ= Ġevent . event Time ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// todo Ġis Ġit Ġany Ġchance Ġto Ġget Ġfailure Ġexception ? ĊĠĠĠĠĠĠĠ Ġ// todo Ġnothing Ġto Ġdo ? Ċ // ĠĠĠĠĠĠĠ ĠKotlin Build Stat Handler . run Safe ("${ Kotlin Build Stat Listener :: class . java }. on Finish ") Ġ{ Ċ // Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfinish Time Ġ= Ġevent ?. result ?. endTime Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstartTime Ġ= Ġevent ?. result ?. startTime Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( Num erical Metrics . GRAD LE _ BUILD _ DURATION , Ġfinish Time Ġ- Ġit . build Started Time ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( Num erical Metrics . GRAD LE _ EXEC UTION _ DURATION , Ġfinish Time Ġ- Ġit . project Evalu ated Time ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( Num erical Metrics . BUILD _ FIN ISH _ TIME , Ġfinish Time ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm bs : ĠM Bean Server Ġ= ĠManagement Factory . get Platform MBean Server () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mb s . is Registered ( bean Name )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm bs . unregister MBean ( bean Name ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġsession Logger Ġ= ĠBuild Session Logger ( gradle . gradle User Home Dir ) Ċ // ĠĠĠĠĠĠĠ ĠKotlin Build Stat Handler . run Safe ("${ Kotlin Build Stat Listener :: class . java }. close () ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Build Stat Handler (). report Global Metrics ( gradle , Ġsession Logger ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( Num erical Metrics . GRAD LE _ BUILD _ DURATION , Ġfinish Time Ġ- Ġit . build Started Time ) Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( Num erical Metrics . GRAD LE _ EXEC UTION _ DURATION , Ġfinish Time Ġ- Ġit . project Evalu ated Time ) Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( Num erical Metrics . BUILD _ FIN ISH _ TIME , Ġfinish Time ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm bs : ĠM Bean Server Ġ= ĠManagement Factory . get Platform MBean Server () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mb s . is Registered ( bean Name )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm bs . unregister MBean ( bean Name ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }