package Ġcom . sw iss chain . utils . al iv est atus . processor Ċ Ċ import Ġcom . sw iss chain . utils . App Initializer Ċ import Ġcom . sw iss chain . utils . al iv est atus . config . Alive Status Config Ċ import Ġcom . sw iss chain . utils . al iv est atus . database . Alive Status Database Accessor Ċ import Ġcom . sw iss chain . utils . al iv est atus . exception . Check App Instance Running Exception Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġkotlin . concurrent . fixed Rate Timer Ċ Ċ class ĠA live Status Processor Ġinternal Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdb Accessor : ĠA live Status Database Accessor , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġconfig : ĠA live Status Config Ċ ) Ġ: ĠRunnable Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOGGER Ġ= ĠLoggerFactory . getLogger ( Alive Status Processor :: class . java . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġis Alive Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! db Accessor . check And Lock ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCheck App Instance Running Exception (" Another Ġapp Ġinstance Ġis Ġalready Ġrunning ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Alive Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġfixed Rate Timer ( name Ġ= Ġ" Alive Status Updater ", Ġinitial Delay Ġ= Ġconfig . update Period , Ġperiod Ġ= Ġconfig . update Period ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeep Alive () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠerrorMessage Ġ= Ġ" Unable Ġto Ġsave Ġa Ġkeep Ġalive Ġstatus : Ġ${ e . message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Initializer . tee Log ( errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . error ( errorMessage , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠRuntime . get Runtime (). add Shutdown Hook ( Alive Status Shutdown Hook ( this )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġprivate Ġfun Ġkeep Alive () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Alive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Accessor . keep Alive () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġinternal Ġfun Ġunlock () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Accessor . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Alive Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ