/
main.go
71 lines (57 loc) · 1.25 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package main
import (
"errors"
"flag"
"log"
"math/rand"
"sync"
"time"
"github.com/shenwei356/util/bytesize"
)
var licenseKey string
var debugMode bool
type Options struct {
Drippers int
StartID int
HeapSize uint64
}
func main() {
opts, err := load()
if err != nil {
log.Fatal(err)
}
var wg sync.WaitGroup
for i := 0; i < opts.Drippers; i++ {
// give a bit of breathing room between each
<-time.Tick(time.Duration(rand.Float64()*100) * time.Millisecond)
dripper := NewDripper(opts.StartID+i, opts.HeapSize)
wg.Add(1)
go func() {
dripper.Drip()
wg.Done()
}()
}
wg.Wait()
}
func load() (*Options, error) {
var drippers, startID int
var heapStr string
flag.StringVar(&licenseKey, "key", "", "License key")
flag.IntVar(&startID, "start", 1, "ID of first dripper")
flag.IntVar(&drippers, "count", 1, "Number of drippers")
flag.StringVar(&heapStr, "heap", "512 GB", "Heap size to report")
flag.BoolVar(&debugMode, "debug", false, "Dump HTTP traffic")
flag.Parse()
if licenseKey == "" {
return nil, errors.New("License key required")
}
heapSize, err := bytesize.Parse([]byte(heapStr))
if err != nil {
return nil, err
}
return &Options{
Drippers: drippers,
HeapSize: uint64(heapSize),
StartID: startID,
}, nil
}