/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠSamsung ĠElectron ics Ċ Ġ* Ġ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 Ġorg . on ap . cc sdk . cds . blueprint spro cess or . services . execution . scripts Ċ Ċ import Ġcom . fasterxml . jackson . databind . node . Object Node Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . cancel Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . join All Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . on ap . cc sdk . cds . blueprint spro cess or . core . Blueprint Properties Service Ċ import Ġorg . on ap . cc sdk . cds . blueprint spro cess or . core . api . data . Execution Service Input Ċ import Ġorg . on ap . cc sdk . cds . blueprint spro cess or . functions . k 8 s . K 8 s Connection Plugin Configuration Ċ import Ġorg . on ap . cc sdk . cds . blueprint spro cess or . functions . k 8 s . instance . K 8 s Plugin Instance Api Ċ import Ġorg . on ap . cc sdk . cds . blueprint spro cess or . functions . k 8 s . instance . health check . K 8 s Rb Instance HealthCheck Ċ import Ġorg . on ap . cc sdk . cds . blueprint spro cess or . functions . k 8 s . instance . health check . K 8 s Rb Instance HealthCheck Simple Ċ import Ġorg . on ap . cc sdk . cds . blueprint spro cess or . services . execution . Abstract Script Component Function Ċ import Ġorg . slf 4 j . LoggerFactory Ċ Ċ open Ġclass ĠK 8 s HealthCheck Ġ: ĠAbstract Script Component Function () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( K 8 s HealthCheck :: class . java ) !! ĊĊĠĠĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" K 8 s HealthCheck " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Plugin Api (): ĠK 8 s Plugin Instance Api Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġblue Print Properties Service : ĠBlueprint Properties Service Ġ= Ġthis . function Dependency Instance As Type (" blueprint Properties Service ") !! ĊĠĠĠĠĠĠĠ Ġval Ġk 8 s Configuration Ġ= ĠK 8 s Connection Plugin Configuration ( blue Print Properties Service ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠK 8 s Plugin Instance Api ( k 8 s Configuration ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġprocess NB ( execution Request : ĠExecution Service Input ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinstance Api Ġ= Ġinit Plugin Api () ĊĊĠĠĠĠĠĠĠ Ġlog . info (" Health Ġcheck Ġscript Ġexecution Ġ- ĠSTART ") ĊĠĠĠĠĠĠĠ Ġval Ġconfig Value Setup : ĠObject Node Ġ= Ġget Dynamic Properties (" config - deploy - setup ") Ġas ĠObject Node ĊĠĠĠĠĠĠĠ Ġlog . info (" Config ĠValue ĠSetup : Ġ$ config Value Setup ") ĊĊĠĠĠĠĠĠĠ Ġval Ġinstance HealthCheck List Ġ= Ġstart Instance HealthCheck ( config Value Setup , Ġinstance Api ) ĊĠĠĠĠĠĠĠ Ġval Ġstatuses Ġ= Ġget Statuses ( instance HealthCheck List , Ġinstance Api ) ĊĠĠĠĠĠĠĠ Ġlog . info (" Health Ġcheck Ġscript Ġexecution Ġ- ĠEND ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Instance HealthCheck ( config Value Setup : ĠObject Node , Ġinstance Api : ĠK 8 s Plugin Instance Api ): ĠList < HealthCheck Instance > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhealth Check Instance List Ġ= Ġarray ListOf < HealthCheck Instance >() ĊĊĠĠĠĠĠĠĠ Ġconfig Value Setup . fields (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstance Name Ġ= Ġit . value . get (" k 8 s - instance - id "). as Text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse : ĠK 8 s Rb Instance HealthCheck Simple ? Ġ= Ġinstance Api . start Instance HealthCheck ( instance Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" K 8 s Rb Instance HealthCheck Simple Ġresponse : Ġ$$ response ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhealth Check Instance List . add ( HealthCheck Instance ( instance Name , Ġresponse ?. id )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlog . info (" health Check Instance List : Ġ$ health Check Instance List ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġhealth Check Instance List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Statuses ( instance HealthCheck List : ĠList < HealthCheck Instance >, Ġinstance Api : ĠK 8 s Plugin Instance Api ): ĠMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatuses Ġ= Ġhash Map Of < String , ĠString >() ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjobs : ĠList < Job > Ġ= Ġinstance HealthCheck List . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Thread Ġstarted : Ġ${ Thread . currentThread (). name } Ġfor Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWAIT ĠAP PRO X Ġ 5 ĠMIN UTES ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( 3 0 ) Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse : ĠK 8 s Rb Instance HealthCheck Ġ= Ġinstance Api . getInstance HealthCheck ( it . heat Stack Id , Ġit . health Check Instance !! ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Response Ġfor Ġ$ it : Ġ$ response ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġresponse . status !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! " RUNNING ". equals ( status , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatuses [ it . heat Stack Id ] Ġ= Ġstatus ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Poll Ġstatus : Ġ$ status Ġfor Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Api . delete Instance HealthCheck ( it . heat Stack Id , Ġit . health Check Instance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 _ 0 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatuses [ it . heat Stack Id ] Ġ= Ġ" Timeout " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . warn (" Send Ġdelete Ġhc Ġrequest ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Api . delete Instance HealthCheck ( it . heat Stack Id , Ġit . health Check Instance !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjobs . join All () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġstatuses ?. forEach Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . value Ġ!= Ġ" Succeeded ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlog . info (" --- ") ĊĠĠĠĠĠĠĠ Ġif Ġ( success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Health check Ġfinished Ġsuccessfully ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Health check Ġfinished Ġwith Ġfailure ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlog . info (" Detailed Ġresults : Ġ$ statuses ") ĊĠĠĠĠĠĠĠ Ġlog . info (" --- ") ĊĠĠĠĠĠĠĠ Ġreturn Ġstatuses ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠHealth Check Instance ( val Ġheat Stack Id : ĠString , Ġval Ġhealth Check Instance : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" HealthCheck Instance ( heat Stack Id ='$ heat Stack Id ', Ġhealth Check Instance ='$ health Check Instance ')" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġrecover NB ( runtime Exception : ĠRuntimeException , Ġexecution Request : ĠExecution Service Input ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . info (" Executing ĠRecovery ") ĊĠĠĠĠĠĠĠ Ġblue Print Runtime Service . get Blueprint Error (). add Error ("${ runtime Exception . message }", ĠgetName ()) ĊĠĠĠ Ġ} Ċ } Ċ