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...] 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) }