84 lines
1.6 KiB
Go
84 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
"os/signal"
|
|
"runtime"
|
|
|
|
"tygit.tuyoo.com/gocomponents/galog/examples/worker"
|
|
)
|
|
|
|
var (
|
|
output = flag.String("o", "", "")
|
|
|
|
c = flag.Int("c", 50, "")
|
|
n = flag.Int("n", 200, "")
|
|
q = flag.Float64("q", 0, "")
|
|
|
|
cpus = flag.Int("cpus", runtime.GOMAXPROCS(-1), "")
|
|
)
|
|
|
|
var usage = `Usage: hey [options...] <url>
|
|
|
|
Options:
|
|
-n Number of requests to run. Default is 200.
|
|
-c Number of workers to run concurrently. Total number of requests cannot
|
|
be smaller than the concurrency level. Default is 50.
|
|
-q Rate limit, in queries per second (QPS) per worker. Default is no rate limit.
|
|
-o Output type. If none provided, a summary is printed.
|
|
"csv" is the only supported alternative. Dumps the response
|
|
metrics in comma-separated values format.
|
|
|
|
-cpus Number of used cpu cores.
|
|
(default for current machine is %d cores)
|
|
`
|
|
|
|
func MainHey() {
|
|
flag.Usage = func() {
|
|
fmt.Fprintf(os.Stderr, usage, runtime.NumCPU())
|
|
}
|
|
|
|
flag.Parse()
|
|
|
|
runtime.GOMAXPROCS(*cpus)
|
|
num := *n
|
|
conc := *c
|
|
q := *q
|
|
|
|
if num <= 0 || conc <= 0 {
|
|
usageAndExit("-n and -c cannot be smaller than 1.")
|
|
}
|
|
|
|
if num < conc {
|
|
usageAndExit("-n cannot be less than -c.")
|
|
}
|
|
|
|
w := &worker.Work{
|
|
N: num,
|
|
C: conc,
|
|
QPS: q,
|
|
Output: *output,
|
|
}
|
|
w.Init()
|
|
|
|
c := make(chan os.Signal, 1)
|
|
signal.Notify(c, os.Interrupt)
|
|
go func() {
|
|
<-c
|
|
w.Stop()
|
|
}()
|
|
w.Run()
|
|
}
|
|
|
|
func usageAndExit(msg string) {
|
|
if msg != "" {
|
|
fmt.Fprint(os.Stderr, msg)
|
|
fmt.Fprintf(os.Stderr, "\n\n")
|
|
}
|
|
flag.Usage()
|
|
fmt.Fprintf(os.Stderr, "\n")
|
|
os.Exit(1)
|
|
}
|