small fixes

This commit is contained in:
Fridrik Asmundsson 2023-04-26 12:32:34 +00:00
parent 78d7ccd391
commit d0e9502bfe

View File

@ -98,6 +98,7 @@ Here are some real examples:
} }
} }
// check if qps was specified
qps := cctx.Int("qps") qps := cctx.Int("qps")
if len(entries) > 2 { if len(entries) > 2 {
if len(entries[2]) > 0 { if len(entries[2]) > 0 {
@ -112,7 +113,25 @@ Here are some real examples:
// check if params was specified // check if params was specified
params := "[]" params := "[]"
if len(entries) > 3 { if len(entries) > 3 {
params = entries[3] // the params are everything after the 3rd ':' character in str. Since params can itself
// contain the ':' characters we can't just split on ':', so instead we need to locate the
// index of the 3rd ':' character and then take everything after that
occur := 0
idx := -1
for i := 0; i < len(str); i++ {
if str[i] == ':' {
occur++
if occur == 3 {
idx = i
break
}
}
}
if idx == -1 {
log.Fatalf("could not parse the params from method %s", entries[0])
}
params = str[idx+1:]
} }
rpcMethods = append(rpcMethods, &RPCMethod{ rpcMethods = append(rpcMethods, &RPCMethod{
@ -132,9 +151,7 @@ Here are some real examples:
<-c <-c
fmt.Println("Received interrupt, stopping...") fmt.Println("Received interrupt, stopping...")
for _, method := range rpcMethods { for _, method := range rpcMethods {
fmt.Println("Stopping method")
method.Stop() method.Stop()
fmt.Println("Stopping method DONE")
} }
}() }()
@ -194,11 +211,11 @@ type RPCMethod struct {
start time.Time start time.Time
// results channel is used by the workers to send results to the reporter // results channel is used by the workers to send results to the reporter
results chan *result results chan *result
// report handles reading the results from workers and printing the report statistics // reporter handles reading the results from workers and printing the report statistics
report *Report reporter *Reporter
} }
// result is the result of a single endpoint request. // result is the result of a single rpc method request.
type result struct { type result struct {
err error err error
statusCode *int statusCode *int
@ -213,12 +230,12 @@ func (rpc *RPCMethod) Run() error {
var wg sync.WaitGroup var wg sync.WaitGroup
wg.Add(rpc.concurrency) wg.Add(rpc.concurrency)
rpc.results = make(chan *result, rpc.concurrency*10_000_000) rpc.results = make(chan *result, rpc.concurrency*1_000)
rpc.stopCh = make(chan struct{}, rpc.concurrency) rpc.stopCh = make(chan struct{}, rpc.concurrency)
go func() { go func() {
rpc.report = NewReport(rpc.results) rpc.reporter = NewReporter(rpc.results)
rpc.report.Run() rpc.reporter.Run()
}() }()
rpc.start = time.Now() rpc.start = time.Now()
@ -241,7 +258,7 @@ func (rpc *RPCMethod) Run() error {
close(rpc.results) close(rpc.results)
// wait until the reporter is done // wait until the reporter is done
<-rpc.report.doneCh <-rpc.reporter.doneCh
return nil return nil
} }
@ -332,10 +349,11 @@ func (rpc *RPCMethod) Report() {
fmt.Printf(" - concurrency: %d\n", rpc.concurrency) fmt.Printf(" - concurrency: %d\n", rpc.concurrency)
fmt.Printf(" - params: %s\n", rpc.params) fmt.Printf(" - params: %s\n", rpc.params)
fmt.Printf(" - qps: %d\n", rpc.qps) fmt.Printf(" - qps: %d\n", rpc.qps)
rpc.report.Print(total) rpc.reporter.Print(total)
} }
type Report struct { // Reporter reads the results from the workers through the results channel and aggregates the results.
type Reporter struct {
// the reporter read the results from this channel // the reporter read the results from this channel
results chan *result results chan *result
// doneCh is used to signal that the reporter has finished reading the results (channel has closed) // doneCh is used to signal that the reporter has finished reading the results (channel has closed)
@ -348,8 +366,8 @@ type Report struct {
errors map[string]int errors map[string]int
} }
func NewReport(results chan *result) *Report { func NewReporter(results chan *result) *Reporter {
return &Report{ return &Reporter{
results: results, results: results,
doneCh: make(chan bool, 1), doneCh: make(chan bool, 1),
statusCodes: make(map[int]int), statusCodes: make(map[int]int),
@ -357,7 +375,7 @@ func NewReport(results chan *result) *Report {
} }
} }
func (r *Report) Run() { func (r *Reporter) Run() {
for res := range r.results { for res := range r.results {
r.latencies = append(r.latencies, res.duration.Milliseconds()) r.latencies = append(r.latencies, res.duration.Milliseconds())
@ -380,7 +398,7 @@ func (r *Report) Run() {
r.doneCh <- true r.doneCh <- true
} }
func (r *Report) Print(elapsed time.Duration) { func (r *Reporter) Print(elapsed time.Duration) {
nrReq := int64(len(r.latencies)) nrReq := int64(len(r.latencies))
if nrReq == 0 { if nrReq == 0 {
fmt.Println("No requests were made") fmt.Println("No requests were made")