package Ġno . nav . hel se Ċ Ċ import Ġcom . zaxxer . hikari . HikariConfig Ċ import Ġio . micro meter . core . instrument . Clock Ċ import Ġio . micro meter . prometheus . Pro metheus Config Ċ import Ġio . micro meter . prometheus . Pro metheus Meter Registry Ċ import Ġio . prometheus . client . Collector Registry Ċ import Ġorg . fly way db . core . Fly way Ċ import Ġjava . time . Duration Ċ import Ġjavax . sql . DataSource Ċ import Ġno . nav . vault . jdbc . h ik ar ic p . Hikari CP Vault Util . create Hikari DataSource With Vault Integration Ġas Ġcreate DataSource Ċ Ċ internal Ġclass ĠDataSource Builder ( private Ġval Ġenv : ĠMap < String , ĠString >) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdatabase Name Ġ= ĊĠĠĠĠĠĠĠ Ġrequire NotNull ( env [" DATABASE _ NAME "]) Ġ{ Ġ" database Ġname Ġmust Ġbe Ġset Ġif Ġjdbc Ġurl Ġis Ġnot Ġprovided " Ġ} ĊĠĠĠ Ġprivate Ġval Ġdatabase Host Ġ= ĊĠĠĠĠĠĠĠ Ġrequire NotNull ( env [" DATABASE _ HOST "]) Ġ{ Ġ" database Ġhost Ġmust Ġbe Ġset Ġif Ġjdbc Ġurl Ġis Ġnot Ġprovided " Ġ} ĊĠĠĠ Ġprivate Ġval Ġdatabase Port Ġ= ĊĠĠĠĠĠĠĠ Ġrequire NotNull ( env [" DATABASE _ PORT "]) Ġ{ Ġ" database Ġport Ġmust Ġbe Ġset Ġif Ġjdbc Ġurl Ġis Ġnot Ġprovided " Ġ} ĊĠĠĠ Ġprivate Ġval Ġvault Mount Path Ġ= Ġenv [" VA ULT _ MO UN TP ATH "] ĊĊĠĠĠ Ġprivate Ġval Ġdb Url Ġ= Ġenv [" DATABASE _ JDBC _ URL "] Ġ?: ĠString . format ( ĊĠĠĠĠĠĠĠ Ġ" jdbc : postgresql :// % s :% s /% s ", Ġdatabase Host , Ġdatabase Port , ĊĠĠĠĠĠĠĠ Ġdatabase Name ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval ĠhikariConfig Ġ= ĠH ikariConfig (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġjdbc Url Ġ= Ġdb Url ĊĠĠĠĠĠĠĠ Ġmaximum PoolSize Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġminimum Idle Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġidle Timeout Ġ= ĠDuration . of Minutes ( 1 ). to Millis () ĊĠĠĠĠĠĠĠ Ġmax Lifetime Ġ= Ġidle Timeout Ġ* Ġ 5 ĊĠĠĠĠĠĠĠ Ġconnection Timeout Ġ= ĠDuration . of Seconds ( 5 ). to Millis () ĊĠĠĠĠĠĠĠ Ġleak Detection Threshold Ġ= ĠDuration . of Seconds ( 5 ). to Millis () ĊĠĠĠĠĠĠĠ Ġmetric Registry Ġ= ĠPrometheus Meter Registry ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrometheus Config . DEFAULT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCollector Registry . default Registry , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClock . SYSTEM ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġh ikari Migration Config Ġ= ĠH ikariConfig (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġjdbc Url Ġ= Ġdb Url ĊĠĠĠĠĠĠĠ Ġmaximum PoolSize Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget DataSource () Ġ= ĊĠĠĠĠĠĠĠ Ġcreate DataSource ( h ikariConfig , Ġvault Mount Path , ĠRole . User . as Role ( database Name )) ĊĊĠĠĠ Ġfun Ġmigrate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠdataSource Ġ= Ġcreate DataSource ( hikari Migration Config , Ġvault Mount Path , ĠRole . Admin . as Role ( database Name )) ĊĠĠĠĠĠĠĠ Ġrun Migration ( dataSource , Ġ" SET ĠROLE Ġ\" ${ Role . Admin . as Role ( database Name )} \" ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun Migration ( dataSource : ĠDataSource , Ġinit Sql : ĠString ? Ġ= Ġnull ) Ġ= ĊĠĠĠĠĠĠĠ ĠFly way . configure () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. dataSource ( dataSource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. placeholders ( map Of (" sp es ial ist _ oid " Ġto Ġrequire NotNull ( env [" SP ES IAL IST _ OID "] ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. init Sql ( init Sql ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. load () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. migrate () ĊĊĠĠĠ Ġenum Ġclass ĠRole Ġ{ ĊĠĠĠĠĠĠĠ ĠAdmin , ĠUser , ĠReadOnly ; ĊĊĠĠĠĠĠĠĠ Ġfun Ġas Role ( database Name : ĠString ) Ġ= Ġ"$ database Name -${ name . lowercase () }" ĊĠĠĠ Ġ} Ċ } Ċ