@@ -10,7 +10,6 @@ import (
1010 "os"
1111 "os/signal"
1212 "reflect"
13- "sort"
1413 "strconv"
1514 "strings"
1615 "syscall"
@@ -21,7 +20,7 @@ import (
2120
2221 "github.com/dustin/go-humanize"
2322 "github.com/goadapp/goad/goad"
24- "github.com/goadapp/goad/queue "
23+ "github.com/goadapp/goad/result "
2524 "github.com/goadapp/goad/version"
2625 "github.com/nsf/termbox-go"
2726)
@@ -82,17 +81,14 @@ func Run() {
8281 config := aggregateConfiguration ()
8382 test := createGoadTest (config )
8483
85- var finalResult queue.RegionsAggData
86- defer printSummary (& finalResult )
87-
88- if config .Output != "" {
89- defer saveJSONSummary (* outputFile , & finalResult )
90- }
91-
9284 sigChan := make (chan os.Signal , 1 )
9385 signal .Notify (sigChan , syscall .SIGINT , syscall .SIGTERM ) // but interrupts from kbd are blocked by termbox
9486
95- start (test , & finalResult , sigChan )
87+ result := start (test , sigChan )
88+ defer printSummary (result )
89+ if config .Output != "" {
90+ defer saveJSONSummary (* outputFile , result )
91+ }
9692}
9793
9894func writeIniFile () {
@@ -298,7 +294,8 @@ func createGoadTest(config *goad.TestConfig) *goad.Test {
298294 return test
299295}
300296
301- func start (test * goad.Test , finalResult * queue.RegionsAggData , sigChan chan os.Signal ) {
297+ func start (test * goad.Test , sigChan chan os.Signal ) result.LambdaResults {
298+ var currentResult result.LambdaResults
302299 resultChan , teardown := test .Start ()
303300 defer teardown ()
304301
@@ -337,43 +334,37 @@ outer:
337334 if ! ok {
338335 break outer
339336 }
340-
337+ currentResult = * result
341338 if firstTime {
342339 clearLogo ()
343340 firstTime = false
344341 }
345342
346- // sort so that regions always appear in the same order
347- var regions []string
348- for key := range result .Regions {
349- regions = append (regions , key )
350- }
351- sort .Strings (regions )
352343 y := 3
353344 totalReqs := 0
354- for _ , region := range regions {
355- data := result .Regions [ region ]
356- totalReqs += data .TotalReqs
357- y = renderRegion (data , y )
345+ regionsData := currentResult . RegionsData ()
346+ for _ , region := range currentResult .Regions () {
347+ totalReqs += regionsData [ region ] .TotalReqs
348+ y = renderRegion (regionsData [ region ] , y )
358349 y ++
359350 }
360351
361352 y = 0
362353 var percentDone float64
363- if result . TotalExpectedRequests > 0 {
364- percentDone = float64 (totalReqs ) / float64 (result . TotalExpectedRequests )
354+ if test . Config . Requests > 0 {
355+ percentDone = float64 (totalReqs ) / float64 (test . Config . Requests )
365356 } else {
366357 percentDone = math .Min (float64 (time .Since (startTime ).Seconds ())/ float64 (test .Config .Timelimit ), 1.0 )
367358 }
368359 drawProgressBar (percentDone , y )
369360
370361 termbox .Flush ()
371- finalResult .Regions = result .Regions
372362
373363 case <- sigChan :
374364 break outer
375365 }
376366 }
367+ return currentResult
377368}
378369
379370func renderLogo () {
@@ -400,7 +391,7 @@ func clearLogo() {
400391}
401392
402393// renderRegion returns the y for the next empty line
403- func renderRegion (data queue .AggData , y int ) int {
394+ func renderRegion (data result .AggData , y int ) int {
404395 x := 0
405396 renderString (x , y , "Region: " , termbox .ColorWhite , termbox .ColorBlue )
406397 x += 8
@@ -417,14 +408,14 @@ func renderRegion(data queue.AggData, y int) int {
417408 headingStr = " Slowest Fastest Timeouts TotErrors"
418409 renderString (x , y , headingStr , coldef | termbox .AttrBold , coldef )
419410 y ++
420- resultStr = fmt .Sprintf (" %7.3fs %7.3fs %10d %10d" , float64 (data .Slowest )/ nano , float64 (data .Fastest )/ nano , data .TotalTimedOut , totErrors (& data ))
411+ resultStr = fmt .Sprintf (" %7.3fs %7.3fs %10d %10d" , float64 (data .Slowest )/ nano , float64 (data .Fastest )/ nano , data .TotalTimedOut , totErrors (data ))
421412 renderString (x , y , resultStr , coldef , coldef )
422413 y ++
423414
424415 return y
425416}
426417
427- func totErrors (data * queue .AggData ) int {
418+ func totErrors (data result .AggData ) int {
428419 var okReqs int
429420 for statusStr , value := range data .Statuses {
430421 status , _ := strconv .Atoi (statusStr )
@@ -463,28 +454,29 @@ func boldPrintln(msg string) {
463454 fmt .Printf ("\033 [1m%s\033 [0m\n " , msg )
464455}
465456
466- func printData (data * queue .AggData ) {
457+ func printData (data result .AggData ) {
467458 boldPrintln (" TotReqs TotBytes AvgTime AvgReq/s (post)unzip" )
468459 fmt .Printf ("%10d %10s %7.3fs %10.2f %10s/s\n " , data .TotalReqs , humanize .Bytes (uint64 (data .TotBytesRead )), float64 (data .AveTimeForReq )/ nano , data .AveReqPerSec , humanize .Bytes (uint64 (data .AveKBytesPerSec )))
469460 boldPrintln (" Slowest Fastest Timeouts TotErrors" )
470461 fmt .Printf (" %7.3fs %7.3fs %10d %10d" , float64 (data .Slowest )/ nano , float64 (data .Fastest )/ nano , data .TotalTimedOut , totErrors (data ))
471462 fmt .Println ("" )
472463}
473464
474- func printSummary (result * queue. RegionsAggData ) {
475- if len (result .Regions ) == 0 {
465+ func printSummary (results result. LambdaResults ) {
466+ if len (results .Regions () ) == 0 {
476467 boldPrintln ("No results received" )
477468 return
478469 }
479470 boldPrintln ("Regional results" )
480471 fmt .Println ("" )
481472
482- for region , data := range result .Regions {
473+ regionsData := results .RegionsData ()
474+ for _ , region := range results .Regions () {
483475 fmt .Println ("Region: " + region )
484- printData (& data )
476+ printData (regionsData [ region ] )
485477 }
486478
487- overall := queue . SumRegionResults ( result )
479+ overall := results . SumAllLambdas ( )
488480
489481 fmt .Println ("" )
490482 boldPrintln ("Overall" )
@@ -498,20 +490,16 @@ func printSummary(result *queue.RegionsAggData) {
498490 fmt .Println ("" )
499491}
500492
501- func saveJSONSummary (path string , result * queue. RegionsAggData ) {
502- if len (result .Regions ) == 0 {
493+ func saveJSONSummary (path string , results result. LambdaResults ) {
494+ if len (results .Regions () ) == 0 {
503495 return
504496 }
505- results := make (map [string ]queue.AggData )
506-
507- for region , data := range result .Regions {
508- results [region ] = data
509- }
497+ dataForRegions := results .RegionsData ()
510498
511- overall := queue . SumRegionResults ( result )
499+ overall := results . SumAllLambdas ( )
512500
513- results ["overall" ] = * overall
514- b , err := json .MarshalIndent (results , "" , " " )
501+ dataForRegions ["overall" ] = overall
502+ b , err := json .MarshalIndent (dataForRegions , "" , " " )
515503 if err != nil {
516504 fmt .Println (err )
517505 return
0 commit comments