/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠNet flix , ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . netflix . spin n aker . testing . scenarios Ċ Ċ import Ġcom . netflix . spin n aker . testing . api . Sp inn aker Client Ċ import Ġcom . netflix . spin n aker . testing . api . Task Ċ import Ġorg . jfree . chart . Chart Factory Ċ import Ġorg . jfree . chart . Chart Utilities Ċ import Ġorg . jfree . data . category . Default Category Dataset Ċ import Ġjava . io . File Ċ Ċ class ĠScenario Runner ( val Ġsp inn aker Client : ĠSp inn aker Client , Ġval Ġscenarios : ĠList < Scenario >) Ġ{ ĊĠ Ġval Ġall Activities Ġ= Ġmutable Map Of < Int , ĠList < Scenario Activity >> (). with Default Ġ{ Ġmutable ListOf () Ġ} ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġplan () ĊĠ Ġ} ĊĊĠ Ġfun Ġplan () Ġ{ ĊĠĠĠ Ġall Activities . put All ( ĊĠĠĠĠĠ Ġscenarios . flatMap Ġ{ Ġit . plan () Ġ}. groupBy Ġ{ Ġit . seconds Offset Ġ} ĊĠĠĠ Ġ) ĊĠĠĠ Ġprintln ( all Activities ) ĊĠ Ġ} ĊĊĠ Ġfun Ġtick ( seconds Offset : ĠInt ) Ġ: ĠBoolean Ġ{ ĊĠĠĠ Ġfor Ġ( activity Ġin Ġall Activities . getValue ( seconds Offset )) Ġ{ ĊĠĠĠĠĠ Ġval Ġresponse Ġ= Ġsp inn aker Client . submit Task ( ĊĠĠĠĠĠĠĠ ĠTask ( ĊĠĠĠĠĠĠĠĠĠ Ġarray ListOf ( activity . job ), ĊĠĠĠĠĠĠĠĠĠ Ġactivity . application , ĊĠĠĠĠĠĠĠĠĠ Ġactivity . description ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ). execute () ĊĊĠĠĠĠĠ Ġactivity . taskId Ġ= Ġresponse . body ()?. ref ?. replace ("/ tasks /", Ġ"") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġmax Seconds Offset Ġ= Ġall Activities . keys . max () Ġ?: Ġ 0 ĊĠĠĠ Ġreturn Ġseconds Offset Ġ> Ġmax Seconds Offset ĊĠ Ġ} ĊĊĠ Ġfun Ġfetch Results (): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġactivities Missing Results Ġ= Ġall Activities . values . flatten (). filter Ġ{ Ġit . task Result Ġ== Ġnull Ġ} ĊĊĠĠĠ Ġactivities Missing Results . forEach Ġ{ ĊĠĠĠĠĠ Ġval Ġtask Result Ġ= Ġsp inn aker Client . get Task ( it . taskId !! ). execute (). body () ĊĠĠĠĠĠ Ġif Ġ( task Result Ġ!= Ġnull Ġ&& Ġtask Result . status Ġ!= Ġ" RUNNING ") Ġ{ ĊĠĠĠĠĠĠĠ Ġit . task Result Ġ= Ġtask Result ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġactivities Missing Results . filter Ġ{ Ġit . task Result Ġ== Ġnull Ġ}. isEmpty () ĊĠ Ġ} ĊĊĠ Ġfun Ġgenerate Report () Ġ{ ĊĠĠĠ Ġval Ġreport Directory Ġ= ĠFile (" results ", Ġ"${ System . currentTimeMillis () }") ĊĠĠĠ Ġreport Directory . mkdir s () ĊĊĠĠĠ Ġval Ġduration Dataset Ġ= ĠDefault Category Dataset () ĊĠĠĠ Ġfor Ġ( activity Ġin Ġall Activities . values . flatten ()) Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġduration Dataset . add Value ( ĊĠĠĠĠĠĠĠĠĠ Ġactivity . task Result !!. get Duration (), ĊĠĠĠĠĠĠĠĠĠ Ġactivity . scenario Name , ĊĠĠĠĠĠĠĠĠĠ Ġactivity . task Result !!. get Variable (" tick Id ") !!. value Ġas ĠInt ) ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Error : Ġ${ activity . taskId }") ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġduration Chart Ġ= ĠChart Factory . create Line Chart ( ĊĠĠĠĠĠ Ġ" Total ĠDuration ", Ġ" Sc enarios ", Ġ" seconds ", Ġduration Dataset ĊĠĠĠ Ġ) ĊĊĠĠĠ ĠChart Utilities . save Chart As PNG ( File ( report Directory , Ġ" scenarios _ duration . png "), Ġduration Chart , Ġ 1 4 4 0 , Ġ 9 0 0 ); ĊĊĠĠĠ Ġval Ġlag Dataset Ġ= ĠDefault Category Dataset () ĊĠĠĠ Ġfor Ġ( activity Ġin Ġall Activities . values . flatten ()) Ġ{ ĊĠĠĠĠĠ Ġlag Dataset . add Value ( ĊĠĠĠĠĠĠĠ Ġactivity . task Result !!. get Lag () Ġ* Ġ 1 0 0 0 , ĊĠĠĠĠĠĠĠ Ġactivity . scenario Name , ĊĠĠĠĠĠĠĠ Ġactivity . task Result !!. get Variable (" tick Id ") !!. value Ġas ĠInt ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġlag Chart Ġ= ĠChart Factory . create Line Chart ( ĊĠĠĠĠĠ Ġ" Total ĠL ag ", Ġ" Sc enarios ", Ġ" milliseconds ", Ġlag Dataset ĊĠĠĠ Ġ) ĊĊĠĠĠ ĠChart Utilities . save Chart As PNG ( File ( report Directory , Ġ" scenarios _ lag . png "), Ġlag Chart , Ġ 1 4 4 0 , Ġ 9 0 0 ); ĊĊĠĠĠ Ġprintln (" Reports Ġwritten Ġto Ġ${ report Directory }") ĊĠ Ġ} Ċ } Ċ