package Ġcom . am central 3 6 5 . service . api Ċ Ċ import Ġmu . Kotlin Logging Ċ Ċ import Ġspark . Request Ċ import Ġspark . Response Ċ Ċ import Ġcom . am central 3 6 5 . service . Status Exception Ċ import Ġcom . am central 3 6 5 . service . StatusMessage Ċ import Ġcom . am central 3 6 5 . service . api . catalog . Asset Role Values Ċ import Ġcom . am central 3 6 5 . service . api . catalog . Assets Ċ import Ġcom . am central 3 6 5 . service . builtins . Role Name Ċ import Ġcom . am central 3 6 5 . service . builtins . roles . Script Ċ import Ġcom . am central 3 6 5 . service . combine Request Params Ċ import Ġcom . am central 3 6 5 . service . dao . Task Ċ import Ġcom . am central 3 6 5 . service . dao . from DB Ċ import Ġcom . am central 3 6 5 . service . dao . string To Ts Ċ import Ġcom . am central 3 6 5 . service . database Store Ċ import Ġcom . am central 3 6 5 . service . format Response Ċ Ċ private Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} Ċ Ċ class ĠTasks Ġ{ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġfun Ġlist ( req : ĠRequest , Ġrsp : ĠResponse ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġrsp . type (" application / json ") ĊĠĠĠĠĠĠĠ Ġreturn Ġ""" {" text ": Ġ" not Ġimplemented "} """ ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġsubmit ( req : ĠRequest , Ġrsp : ĠResponse ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġthis Thread Id Ġ= ĠThread . currentThread (). name ; ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Ġ= ĠTask () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrsp . type (" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparam Map Ġ= Ġcombine Request Params ( req , Ġparse Json Body Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . name Ġ= Ġparam Map . getOrElse (" task Name ") Ġ{ Ġthrow ĠStatus Exception ( 4 0 0 , Ġ" parameter Ġ' task Name ' Ġis Ġrequired ") Ġ}. trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscript Key Ġ= Ġparam Map . getOrElse (" script Key ") Ġ{ Ġthrow ĠStatus Exception ( 4 0 0 , Ġ" parameter Ġ' script Key ' Ġis Ġrequired ") Ġ}. trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Key Ġ= Ġparam Map . get (" target Key ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Ġtarget Key . isNull OrEmpty () Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġformat Response ( rsp , ĠStatus Message ( 4 0 0 , Ġ" target Key Ġwas Ġnot Ġprovided Ġor Ġempty ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . executor Role Name Ġ= Ġparam Map . get (" executor Role ") ?. trim () Ġ?: ĠRole Name . Script Executor SSH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . scheduled Run Ts Ġ= Ġstring To Ts ( param Map . get (" scheduled Ts ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . script Args Ġ= Ġparam Map . get (" script Args ") ?. trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . description Ġ= Ġparam Map . get (" description ") ?. trim () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscript Ġ= Ġfrom DB < Script >( script Key , ĠRole Name . Script ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Role Name Ġ= Ġscript . target Role Name Ġ?: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġformat Response ( rsp , ĠStatus Message ( 4 0 0 , Ġ" script Ġ${ script . name } Ġhas Ġno Ġattribute Ġ' target Role Name ' ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Asset Ġ= ĠAssets . get Asset ByKey ( target Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! Asset Role Values . has Role ( target Asset . asset Id !! , Ġtarget Role Name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġformat Response ( rsp , ĠStatus Message ( 4 0 4 , Ġ" asset Ġ$ target Key Ġhas Ġno Ġrequested Ġtarget Ġrole Ġ'$ target Role Name ' ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . status Ġ= ĠTask . Status . Ready ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . script Asset Id Ġ= Ġscript . asset !!. asset Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . target Asset Id Ġ= Ġtarget Asset . asset Id ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġdatabase Store . insert Object As Row ( task ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ"$ this Thread Id : Ġsubmitted Ġtask Ġ${ task . taskId }: Ġ${ msg . msg }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat Response ( rsp , Ġmsg , Ġjson If Ok Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch ( x : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error Ġ{ Ġ"$ this Thread Id : Ġerror Ġrunning Ġscript : Ġ${ x . message }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat Response ( rsp , Ġx ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }} Ċ