func RunBenchmark()

in benchmarks/benchmark.go [15:48]


func RunBenchmark(name string, goroutines int, iterations int, operation operations.BenchmarkOperation) {
	h := hist.NewHistogram(1000, int(60*time.Second))

	recorder := make(chan interface{}, 128)

	go bender.Record(recorder, bender.NewHistogramRecorder(h))

	log.Printf("Running %v. Iterations %v, concurrency %v", name, iterations, goroutines)

	var wg sync.WaitGroup

	start := time.Now().UnixNano()
	recorder <- &bender.StartEvent{Start: start}

	for i := 1; i <= goroutines; i++ {
		wg.Add(1)

		go func() {
			defer wg.Done()

			for i := 1; i <= iterations; i++ {
				start := time.Now().UnixNano()
				recorder <- &bender.StartRequestEvent{Time: start, Request: nil}
				err := operation.Run()
				recorder <- &bender.EndRequestEvent{Start: start, End: time.Now().UnixNano(), Response: nil, Err: err}

			}
		}()
	}
	wg.Wait()
	recorder <- &bender.EndEvent{Start: start, End: time.Now().UnixNano()}

	fmt.Println(h)
}