package Ġorg . ev om aster . core . search . service . monitor Ċ Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġcom . google . inject . Inject Ċ import Ġorg . ev om aster . core . EM Config Ċ import Ġorg . ev om aster . core . problem . rest . Rest Action Ċ import Ġorg . ev om aster . core . problem . rest . param . Param Ċ import Ġorg . ev om aster . core . search . Evalu ated Individual Ċ import Ġorg . ev om aster . core . search . gene . Gene Ċ import Ġorg . ev om aster . core . search . service .* Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . File Ċ import Ġjava . lang . IllegalStateException Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . nio . channels . File Channel Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . nio . file . Standard Open Option Ċ import Ġjavax . annotation . Post Construct ĊĊ Ċ /** Ċ Ġ* Ġ@ description : Ġmonitor Ġ 1 ) Ġhow Ġare Ġrest Ġactions Ġor Ġrest Ġindividual Ġselected Ġregarding Ġhow Ġto Ġsample All Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 ) Ġhow Ġdoes Ġtargets Ġupdate Ċ Ġ*/ ĊĊ Ċ class ĠSearch Process Monitor : ĠSearch Listener Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtime : ĠSearch Time Controller ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġconfig : ĠEM Config ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġarchive : ĠArchive < *> ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġid Mapper : ĠId Mapper ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġoverall Ġ: ĠSearch Overall < *> ĊĊĠĠĠ Ġvar Ġeval : ĠEvalu ated Individual < *> ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġstep Ġ: ĠStep Of Search Process < *> ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġis Mut ated Ġ: ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġrecord Ġthe Ġprogress Ġof Ġsaved Ġsteps ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġtb Ġ= Ġ 1 ĊĊĠĠĠ Ġprivate Ġval Ġevaluated Individual s Ġ: ĠMutable List < Evalu ated Individual <* >> Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog : ĠLogger Ġ= ĠLoggerFactory . getLogger ( Search Process Monitor :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġall Ġsteps Ġof Ġsearch Ġare Ġarchived Ġunder Ġthe ĠDATA _ FOLDER , Ġe . g ., Ġ@ see Ġorg . ev om aster . core . EM Config . process Files / data ĊĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDATA _ FOLDER Ġ= Ġ" data " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġa Ġname Ġof Ġa Ġfile Ġto Ġsave Ġfinal ĠArchive , Ġand Ġit Ġcan Ġbe Ġfound Ġin Ġ@ see Ġorg . ev om aster . core . EM Config . process Files / overall . json ĊĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNAME Ġ= Ġ" overall " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġall Ġsteps Ġand Ġoverall Ġproduced Ġby Ġa Ġsearch Ġmonitor Ġare Ġsaved Ġas Ġjson Ġfiles . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFILE _ TYPE Ġ= Ġ". json " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġgson Ġ= Gson Builder (). register Type Adapter ( Rest Action :: class . java , ĠInterface Adapter < Rest Action >()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register Type Adapter ( Param :: class . java , ĠInterface Adapter < Param >()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register Type Adapter ( Gene :: class . java , ĠInterface Adapter < Gene >()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Post Construct ĊĠĠĠ Ġfun Ġpost Construct (){ ĊĠĠĠĠĠĠĠ Ġinit Monitor Process Outputs () ĊĠĠĠĠĠĠĠ Ġif ( config . enable Process Monitor ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime . addListener ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnew Action Evalu ated () Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( config . enable Process Monitor ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevaluated Individual s . add ( eval !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstep Ġ= ĠStep Of Search Process ( archive , Ġtime . evalu ated Individual s , Ġeval !!. individual , Ġeval !! , ĠSystem . currentTimeMillis (), is Mut ated ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrecord ( added : ĠBoolean , Ġimprove Archive Ġ: ĠBoolean , Ġeval Ind Ġ: ĠEvalu ated Individual < *> ){ ĊĠĠĠĠĠĠĠ Ġif ( config . enable Process Monitor ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( eval Ind Ġ!= Ġeval ) Ġthrow ĠIllegalStateException (" Mis matched Ġevaluated Ġindividual Ġunder Ġmonitor ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( time . evalu ated Actions Ġ>= Ġtb Ġ* Ġconfig . max Action Evalu ations / config . process Interval ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġstep Ġis Ġassigned Ġwhen Ġan Ġindividual Ġis Ġevaluated Ġ( part Ġof Ġcalculate Coverage Ġof ĠF itness Function ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġbut Ġin Ġorder Ġto Ġrecord Ġif Ġthe Ġevaluated Ġindividual Ġadded Ġinto ĠArchive , Ġwe Ġneed Ġto Ġsave Ġit Ġafter Ġexecuting Ġadd IfNeeded Ġin ĠArchive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠSince Ġcalculate Coverage Ġis Ġalways Ġfollowed Ġby Ġadd If Need , Ġthe Ġstep Ġshould Ġbe Ġnot Ġnull . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep !!. added Ġ= Ġadded ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep !!. impro ved Archive Ġ= Ġimprove Archive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Step ( step !!. indexOf Evaluation , Ġstep !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( config . show Progress ) Ġlog . info (" number Ġof Ġtargets : Ġ${ step !!. pop ulations . size }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtb ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġset Overall (){ ĊĠĠĠĠĠĠĠ Ġval Ġst p Ġ= Ġconfig . stopping Criterion . toString ()+" _"+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if ( config . stopping Criterion . toString (). toLowerCase (). contains (" time ")) Ġconfig . time Limit InSeconds (). toString () Ġelse Ġconfig . max Action Evalu ations ) ĊĠĠĠĠĠĠĠ Ġthis . overall Ġ= ĠSearch Overall ( stp , Ġtime . evalu ated Individual s , Ġeval !!. individual , Ġeval !! , Ġarchive , Ġid Mapper , Ġtime . get StartTime ()) ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġprivate Ġfun Ġinit Monitor Process Outputs (){ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPaths . get ( config . process Files ) ĊĠĠĠĠĠĠĠ Ġif ( config . show Progress ) Ġlog . info (" Deleting Ġall Ġfiles Ġin Ġ${ path . to Uri () }") ĊĊĠĠĠĠĠĠĠ Ġif ( Files . exists ( path )){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . walk ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted ( Comparator . reverse Order ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( Path :: to File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! it . delete ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . warn (" Fail Ġto Ġdelete Ġ${ it . path }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġsave Overall (){ ĊĠĠĠĠĠĠĠ Ġset Overall () ĊĠĠĠĠĠĠĠ Ġwrite By Channel ( Paths . get ( config . process Files Ġ+ ĠFile . separator Ġ+ Ġget Overall FileName ()), Ġgson . toJson ( this . overall )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Step ( index : Int , Ġv Ġ: ĠStep Of Search Process < *> ){ ĊĠĠĠĠĠĠĠ Ġwrite By Channel ( Paths . get ( config . process Files Ġ+ ĠFile . separator + ĠDATA _ FOLDER Ġ+ File . separator Ġ+ Ġ"" + Ġget Step FileName ( index ) Ġ), Ġgson . toJson ( v )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġwrite By Channel ( path Ġ: ĠPath , Ġvalue Ġ: String ){ ĊĠĠĠĠĠĠĠ Ġif Ġ(! Files . exists ( path . parent )) ĠFiles . create Directories ( path . parent ) ĊĠĠĠĠĠĠĠ ĠFiles . create File ( path ) ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteBuffer . wrap ( value . toByteArray ()) ĊĠĠĠĠĠĠĠ ĠFile Channel . open ( path , ĠStandard Open Option . WRITE , ĠStandard Open Option . CREATE ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwriteTo Channel ( this , Ġbuffer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠwriteTo Channel ( channel : ĠFile Channel , Ġbuffer : ĠByteBuffer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( buffer . has Remaining ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . write ( buffer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġchannel . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Step FileName ( value Ġ: ĠInt ) Ġ: String { ĊĠĠĠĠĠĠĠ Ġreturn ĠString . format ("% 0 ${ config . max Action Evalu ations . toString (). length }" +" d ", Ġvalue ) Ġ+ ĠFILE _ TYPE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Overall FileName () Ġ: ĠString { ĊĠĠĠĠĠĠĠ Ġreturn ĠNAME Ġ Ġ+ ĠFILE _ TYPE ĊĠĠĠ Ġ} Ċ Ċ } ĊĊ