diff --git a/.gitignore b/.gitignore index e026003..03a9812 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .DS_Store .idea -.vscode \ No newline at end of file +.vscode +mqtt-benchmark diff --git a/README.md b/README.md index c2ad1d6..e5a62a7 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ A simple MQTT (broker) benchmarking tool. Installation: ```sh -go get github.com/krylovsk/mqtt-benchmark +go install github.com/krylovsk/mqtt-benchmark ``` The tool supports multiple concurrent clients, configurable message size, etc: diff --git a/client.go b/client.go index 1acfdbf..96bfe32 100644 --- a/client.go +++ b/client.go @@ -19,7 +19,7 @@ type Client struct { BrokerUser string BrokerPass string MsgTopic string - MsgPayload string + MsgPayload string MsgSize int MsgCount int MsgQoS byte @@ -57,7 +57,7 @@ func (c *Client) Run(res chan *RunResults) { } case <-donePub: // calculate results - duration := time.Now().Sub(started) + duration := time.Since(started) runResults.MsgTimeMin = stats.StatsMin(times) runResults.MsgTimeMax = stats.StatsMax(times) runResults.MsgTimeMean = stats.StatsMean(times) @@ -77,22 +77,21 @@ func (c *Client) Run(res chan *RunResults) { func (c *Client) genMessages(ch chan *Message, done chan bool) { var payload interface{} - // set payload if specified - if c.MsgPayload != "" { - payload = c.MsgPayload - } else { - payload = make([]byte, c.MsgSize) - } + // set payload if specified + if c.MsgPayload != "" { + payload = c.MsgPayload + } else { + payload = make([]byte, c.MsgSize) + } - ch <- &Message{ - Topic: c.MsgTopic, - QoS: c.MsgQoS, - Payload: payload, - } + ch <- &Message{ + Topic: c.MsgTopic, + QoS: c.MsgQoS, + Payload: payload, + } done <- true // log.Printf("CLIENT %v is done generating messages\n", c.ID) - return } func (c *Client) pubMessages(in, out chan *Message, doneGen, donePub chan bool) { diff --git a/main.go b/main.go index bc9adfa..e8851c8 100644 --- a/main.go +++ b/main.go @@ -60,7 +60,7 @@ func main() { var ( broker = flag.String("broker", "tcp://localhost:1883", "MQTT broker endpoint as scheme://host:port") topic = flag.String("topic", "/test", "MQTT topic for outgoing messages") - payload = flag.String("payload", "", "MQTT message payload. If empty, then payload is generated based on the size parameter") + payload = flag.String("payload", "", "MQTT message payload. If empty, then payload is generated based on the size parameter") username = flag.String("username", "", "MQTT client username (empty if auth disabled)") password = flag.String("password", "", "MQTT client password (empty if auth disabled)") qos = flag.Int("qos", 1, "QoS for published messages") @@ -110,7 +110,7 @@ func main() { BrokerUser: *username, BrokerPass: *password, MsgTopic: *topic, - MsgPayload: *payload, + MsgPayload: *payload, MsgSize: *size, MsgCount: *count, MsgQoS: byte(*qos), @@ -126,7 +126,7 @@ func main() { for i := 0; i < *clients; i++ { results[i] = <-resCh } - totalTime := time.Now().Sub(start) + totalTime := time.Since(start) totals := calculateTotalResults(results, totalTime, *clients) // print stats @@ -187,7 +187,7 @@ func printResults(results []*RunResults, totals *TotalResults, format string) { var out bytes.Buffer _ = json.Indent(&out, data, "", "\t") - fmt.Println(string(out.Bytes())) + fmt.Println(out.String()) default: for _, res := range results { fmt.Printf("======= CLIENT %d =======\n", res.ID) @@ -210,7 +210,6 @@ func printResults(results []*RunResults, totals *TotalResults, format string) { fmt.Printf("Average Bandwidth (msg/sec): %.3f\n", totals.AvgMsgsPerSec) fmt.Printf("Total Bandwidth (msg/sec): %.3f\n", totals.TotalMsgsPerSec) } - return } func generateTLSConfig(certFile string, keyFile string) *tls.Config {