Skip to content

Commit 5acf474

Browse files
committed
remove init func
1 parent 3092e17 commit 5acf474

File tree

6 files changed

+66
-51
lines changed

6 files changed

+66
-51
lines changed

boomer.go

+47-22
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,66 @@ import (
55
"log"
66
"os"
77
"os/signal"
8-
"runtime"
98
"strings"
109
"syscall"
10+
"sync"
11+
"sync/atomic"
12+
"runtime"
1113
)
1214

13-
// Run accepts a slice of Task and connects
14-
// to a locust master.
15-
func Run(tasks ...*Task) {
15+
var runTasks string
16+
var maxRPS int64
17+
var maxRPSThreshold int64
18+
var maxRPSEnabled = false
19+
var maxRPSControlChannel = make(chan bool)
20+
21+
var initted uint32
22+
var initMutex = sync.Mutex{}
23+
24+
// Init boomer
25+
func initBoomer() {
1626

1727
// support go version below 1.5
1828
runtime.GOMAXPROCS(runtime.NumCPU())
1929

30+
flag.Int64Var(&maxRPS, "max-rps", 0, "Max RPS that boomer can generate.")
31+
flag.StringVar(&runTasks, "run-tasks", "", "Run tasks without connecting to the master, multiply tasks is separated by comma. Usually, it's for debug purpose.")
32+
flag.StringVar(&masterHost, "master-host", "127.0.0.1", "Host or IP address of locust master for distributed load testing. Defaults to 127.0.0.1.")
33+
flag.IntVar(&masterPort,"master-port", 5557, "The port to connect to that is used by the locust master for distributed load testing. Defaults to 5557.")
34+
flag.StringVar(&rpc,"rpc", "zeromq", "Choose zeromq or tcp socket to communicate with master, don't mix them up.")
35+
2036
if !flag.Parsed() {
2137
flag.Parse()
2238
}
2339

24-
if *runTasks != "" {
40+
if maxRPS > 0 {
41+
log.Println("Max RPS that boomer may generate is limited to", maxRPS)
42+
maxRPSEnabled = true
43+
}
44+
45+
initEvents()
46+
initStats()
47+
48+
// done
49+
atomic.StoreUint32(&initted, 1)
50+
}
51+
52+
// Run accepts a slice of Task and connects
53+
// to a locust master.
54+
func Run(tasks ...*Task) {
55+
56+
if atomic.LoadUint32(&initted) == 1 {
57+
panic("Don't call boomer.Run() more than once.")
58+
}
59+
60+
// init boomer
61+
initMutex.Lock()
62+
initBoomer()
63+
initMutex.Unlock()
64+
65+
if runTasks != "" {
2566
// Run tasks without connecting to the master.
26-
taskNames := strings.Split(*runTasks, ",")
67+
taskNames := strings.Split(runTasks, ",")
2768
for _, task := range tasks {
2869
if task.Name == "" {
2970
continue
@@ -39,11 +80,6 @@ func Run(tasks ...*Task) {
3980
return
4081
}
4182

42-
if maxRPS > 0 {
43-
log.Println("Max RPS that boomer may generate is limited to", maxRPS)
44-
maxRPSEnabled = true
45-
}
46-
4783
var r *runner
4884
client := newClient()
4985
r = &runner{
@@ -67,14 +103,3 @@ func Run(tasks ...*Task) {
67103
log.Println("shut down")
68104

69105
}
70-
71-
var runTasks *string
72-
var maxRPS int64
73-
var maxRPSThreshold int64
74-
var maxRPSEnabled = false
75-
var maxRPSControlChannel = make(chan bool)
76-
77-
func init() {
78-
runTasks = flag.String("run-tasks", "", "Run tasks without connecting to the master, multiply tasks is separated by comma. Usually, it's for debug purpose.")
79-
flag.Int64Var(&maxRPS, "max-rps", 0, "Max RPS that boomer can generate.")
80-
}

client.go

+3-13
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
package boomer
22

3-
import (
4-
"flag"
5-
)
6-
73
type client interface {
84
recv()
95
send()
@@ -13,12 +9,6 @@ var fromMaster = make(chan *message, 100)
139
var toMaster = make(chan *message, 100)
1410
var disconnectedFromMaster = make(chan bool)
1511

16-
var masterHost *string
17-
var masterPort *int
18-
var rpc *string
19-
20-
func init() {
21-
masterHost = flag.String("master-host", "127.0.0.1", "Host or IP address of locust master for distributed load testing. Defaults to 127.0.0.1.")
22-
masterPort = flag.Int("master-port", 5557, "The port to connect to that is used by the locust master for distributed load testing. Defaults to 5557.")
23-
rpc = flag.String("rpc", "zeromq", "Choose zeromq or tcp socket to communicate with master, don't mix them up.")
24-
}
12+
var masterHost string
13+
var masterPort int
14+
var rpc string

client_czmq.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ func newClient() client {
1818
log.Println("Boomer is built with goczmq support.")
1919
var client client
2020
var message string
21-
if *rpc == "zeromq" {
22-
client = newZmqClient(*masterHost, *masterPort)
23-
message = fmt.Sprintf("Boomer is connected to master(%s:%d|%d) press Ctrl+c to quit.", *masterHost, *masterPort, *masterPort+1)
24-
} else if *rpc == "socket" {
25-
client = newSocketClient(*masterHost, *masterPort)
26-
message = fmt.Sprintf("Boomer is connected to master(%s:%d) press Ctrl+c to quit.", *masterHost, *masterPort)
21+
if rpc == "zeromq" {
22+
client = newZmqClient(masterHost, masterPort)
23+
message = fmt.Sprintf("Boomer is connected to master(%s:%d|%d) press Ctrl+c to quit.", masterHost, masterPort, masterPort+1)
24+
} else if rpc == "socket" {
25+
client = newSocketClient(masterHost, masterPort)
26+
message = fmt.Sprintf("Boomer is connected to master(%s:%d) press Ctrl+c to quit.", masterHost, masterPort)
2727
} else {
28-
log.Fatal("Unknown rpc type:", *rpc)
28+
log.Fatal("Unknown rpc type:", rpc)
2929
}
3030
log.Println(message)
3131
return client

client_gomq.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@ func newClient() client {
2121
log.Println("Boomer is built with gomq support.")
2222
var message string
2323
var client client
24-
if *rpc == "zeromq" {
25-
client = newZmqClient(*masterHost, *masterPort)
26-
message = fmt.Sprintf("Boomer is connected to master(%s:%d|%d) press Ctrl+c to quit.", *masterHost, *masterPort, *masterPort+1)
27-
} else if *rpc == "socket" {
28-
client = newSocketClient(*masterHost, *masterPort)
29-
message = fmt.Sprintf("Boomer is connected to master(%s:%d) press Ctrl+c to quit.", *masterHost, *masterPort)
24+
if rpc == "zeromq" {
25+
client = newZmqClient(masterHost, masterPort)
26+
message = fmt.Sprintf("Boomer is connected to master(%s:%d|%d) press Ctrl+c to quit.", masterHost, masterPort, masterPort+1)
27+
} else if rpc == "socket" {
28+
client = newSocketClient(masterHost, masterPort)
29+
message = fmt.Sprintf("Boomer is connected to master(%s:%d) press Ctrl+c to quit.", masterHost, masterPort)
3030
} else {
31-
log.Fatal("Unknown rpc type:", *rpc)
31+
log.Fatal("Unknown rpc type:", rpc)
3232
}
3333
log.Println(message)
3434
return client

events.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func requestFailureHandler(requestType string, name string, responseTime interfa
4242
}
4343
}
4444

45-
func init() {
45+
func initEvents() {
4646
Events.Subscribe("request_success", requestSuccessHandler)
4747
Events.Subscribe("request_failure", requestFailureHandler)
4848
}

stats.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ var requestFailureChannel = make(chan *requestFailure, 100)
268268
var clearStatsChannel = make(chan bool)
269269
var messageToRunner = make(chan map[string]interface{}, 10)
270270

271-
func init() {
271+
func initStats() {
272272
stats.entries = make(map[string]*statsEntry)
273273
stats.errors = make(map[string]*statsError)
274274
go func() {

0 commit comments

Comments
 (0)