package Ġru . art . platform . service Ċ Ċ import Ġcom . google . common . base . Throw ables . get StackTrace AsString Ċ import Ġorg . reactiv est ream s . Subscription Ċ import Ġreactor . core . Disposable Ċ import Ġru . art . core . color izer . Ansi Color izer . error Ċ import Ġru . art . logging . Logging Module . logging Module Ċ import Ġru . art . platform . agent . loader . Project Load TestRunner Ċ import Ġru . art . platform . api . model . file . Platform File Identifier Ċ import Ġru . art . platform . api . model . load . Load Test Ċ import Ġru . art . platform . api . model . load . Load Test Event Ċ import Ġru . art . platform . api . model . request . Agent Load Test Request Ċ import Ġru . art . platform . broker . updated Ċ import Ġru . art . platform . client . Agent Client Ċ import Ġru . art . platform . client . connect To Agent Ċ import Ġru . art . platform . client . remove Agent Ċ import Ġru . art . platform . common . constants . States .* Ċ import Ġru . art . platform . constants . R socket Constants . AGENT _ STREAM _ CH UN KS _ COUNT Ċ import Ġru . art . platform . extensions . Chunk ed Request er Ċ import Ġru . art . platform . extensions . chunk ed Ċ import Ġru . art . platform . repository . Git Resource Repository . get Git Resource Ċ import Ġru . art . platform . repository . Load Testing Repository . get Load Test Ċ import Ġru . art . platform . repository . Load Testing Repository . put Load Test Ċ import Ġru . art . platform . repository . Load Testing Repository . try Get Load Test Ċ import Ġru . art . platform . repository . Log Repository . getLog Ċ import Ġru . art . platform . repository . Log Repository . put Log Ċ import Ġru . art . platform . repository . Project Repository . getProject Ċ import Ġru . art . platform . service . File Service . put File Ċ import Ġru . art . platform . service . Load Testing Service . get Load Test Scenario Ċ import Ġru . art . task . deferred . executor . Scheduler Module Actions . as ynchronous Ċ import Ġjava . time . Instant . now Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ object ĠProject Load Testing Service Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsubscriptions Ġ= ĠConcurrent HashMap < Long , ĠSubscription >() ĊĠĠĠ Ġprivate Ġval Ġagents Ġ= ĠConcurrent HashMap < Long , ĠAgent Client >() ĊĠĠĠ Ġprivate Ġval Ġdis pos ables Ġ= ĠConcurrent HashMap < Long , ĠDis posable >() ĊĠĠĠ Ġprivate Ġval Ġrequest er Ġ= ĠChunk ed Request er ( AGENT _ STREAM _ CH UN KS _ COUNT ) ĊĊĠĠĠ Ġfun Ġstart Load Testing ( test : ĠLoad Test , Ġtest Runner : ĠProject Load TestRunner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( test ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasynchronous Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( get Load Test ( id ). is Canceled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Runner . stop Agent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ as ynchronous ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= Ġtest Runner . start Agent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( get Load Test ( id ). is Canceled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Runner . stop Agent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ as ynchronous ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠAgent Load Test Request ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. projectId ( getProject ( projectId ). external Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load Test ( to Builder (). state ( LOAD _ TEST _ STARTED _ ON _ RESOURCE _ STATE ). build (). apply Ġ{ Ġupdate Load Test ( this ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load Test Scenario ( get Load Test Scenario ( test . scenario Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. git Resource ( get Git Resource ( getProject ( projectId ). git ResourceId . id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis pos ables [ id ] Ġ= Ġconnect To Agent ( configuration ). apply Ġ{ Ġagents [ id ] Ġ= Ġthis Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start Load Test ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. chunk ed ( requester ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ Ġsubscription Ġ-> Ġsubscriptions [ id ] Ġ= Ġsubscription Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError Ġ{ Ġerror Ġ-> Ġhandle Load Test Error ( error , Ġtest Runner ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Complete Ġ{ Ġcomplete Load Test ( test Runner ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġevent Ġ-> Ġupdate Load Test ( event ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Load Test Error ( error , Ġtest Runner ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcancel Load Testing ( test : ĠLoad Test , Ġtest Runner : ĠProject Load TestRunner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdestroy Agent ( test , Ġtest Runner ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠLoad Test . update Load Test ( event : ĠLoad Test Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Get Load Test ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġtest Ġ-> Ġtest . isRunning Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. if Present Ġ{ Ġload Test Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Log ( getLog ( log Id ). to Builder (). record ( event . log Record ). build ()). updated () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . load Test Ġ!= Ġload Test ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġload Test Builder Ġ= Ġevent . load Test . to Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . report Archive Bytes ?. take If Ġ{ Ġbytes Ġ-> Ġbytes . isNotEmpty () Ġ} ?. let Ġ{ Ġbytes Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġput File (" report -${ load Test . id }. zip ", Ġbytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Test Builder . report Archive Name ( Platform File Identifier . builder (). name ( file . name ). id ( file . id ). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Load Test ( load Test Builder . state ( LOAD _ TEST _ RUNNING _ STATE ). end TimeStamp ( now (). epoch Second ). build ()). updated () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest er . request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Load Test ( load Test : ĠLoad Test ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Get Load Test ( load Test . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġtest Ġ-> Ġtest . isRunning Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. if Present Ġ{ Ġput Load Test ( load Test ). updated () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠLoad Test . handle Load Test Error ( error : ĠThrowable , Ġtest Runner : ĠProject Load TestRunner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogging Module (). getLogger ( Project Load Testing Service :: class . java ). error ( error . message , Ġerror ) ĊĠĠĠĠĠĠĠ Ġtry Get Load Test ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġtest Ġ-> Ġtest . isRunning Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. if Present Ġ{ Ġload Test Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Load Test ( load Test ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. end TimeStamp ( now (). epoch Second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. state ( LOAD _ TEST _ FAILED _ STATE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. updated () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Log ( getLog ( log Id ). to Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. record ( error (" Load Ġtest Ġfailed : Ġ${ error . message }\ n ${ get StackTrace AsString ( error )} ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. updated () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġasynchronous Ġ{ Ġdestroy Agent ( this , Ġtest Runner ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠLoad Test . complete Load Test ( test Runner : ĠProject Load TestRunner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Get Load Test ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġtest Ġ-> Ġtest . isRunning Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. if Present Ġ{ Ġload Test Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Log ( log Id ). updated () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Load Test ( load Test . to Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. end TimeStamp ( now (). epoch Second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. state ( LOAD _ TEST _ DONE _ STATE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. updated () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġasynchronous Ġ{ Ġdestroy Agent ( this , Ġtest Runner ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdestroy Agent ( test : ĠLoad Test , Ġrunner : ĠProject Load TestRunner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsubscriptions [ test . id ]?. cancel () ĊĠĠĠĠĠĠĠ Ġdis pos ables [ test . id ]?. dispose () ĊĠĠĠĠĠĠĠ Ġrunner . stop Agent () ĊĠĠĠĠĠĠĠ Ġagents [ test . id ]?. let (:: remove Agent ) ĊĠĠĠĠĠĠĠ Ġagents . remove ( test . id ) ĊĠĠĠĠĠĠĠ Ġdis pos ables . remove ( test . id ) ĊĠĠĠĠĠĠĠ Ġsubscriptions . remove ( test . id ) ĊĠĠĠ Ġ} Ċ } Ċ