Mainflux.mainflux/tools/mqtt-bench
b1ackd0t 5e060d5620
NOISSUE - Add More Linters (#1924)
* Fix linting errors

Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>

* feat(linters): add ineffassign linter

This commit adds the `ineffassign` linter to the project's `.golangci.yml` configuration file. The `ineffassign` linter helps identify and flag assignments to variables that are never used, helping to improve code quality and maintainability.

Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>

* Add extra linters

Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>

* feat(golangci): Add header check

- Added goheader check to ensure all files have license headers
- Added build tags for "nats" in the .golangci.yml file to include the necessary dependencies for the "nats" package during the build process.
- Also, increased the maximum number of issues per linter and the maximum number of same issues reported by the linter to improve the code quality analysis.

Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>

* feat(.golangci.yml): Add new linters

Add the following new linters to the .golangci.yml configuration file:
- asasalint
- asciicheck
- bidichk
- contextcheck
- decorder
- dogsled
- errchkjson
- errname
- execinquery
- exportloopref
- ginkgolinter
- gocheckcompilerdirectives

These linters will help improve code quality and catch potential issues during the code review process.

Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>

---------

Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
2023-10-16 11:43:33 +02:00
..
cmd NOISSUE - Change import name aliases (#1868) 2023-08-11 11:30:25 +02:00
scripts NOISSUE - update mqtt benchmark (#824) 2019-08-27 14:21:39 +02:00
templates NOISSUE - Simplify MQTT benchmarking tool (#852) 2019-09-25 19:02:29 +02:00
Makefile NOISSUE - Improve MQTT benchmarking tools (#828) 2019-08-30 14:09:12 +02:00
README.md NOISSUE - Update Provision service (#1658) 2022-10-21 17:01:55 +02:00
bench.go NOISSUE - Add More Linters (#1924) 2023-10-16 11:43:33 +02:00
client.go NOISSUE - Add More Linters (#1924) 2023-10-16 11:43:33 +02:00
config.go MF-1506 - Group-based Access Control (#1716) 2023-06-14 12:40:37 +02:00
doc.go MF-1506 - Group-based Access Control (#1716) 2023-06-14 12:40:37 +02:00
results.go NOISSUE - Add More Linters (#1924) 2023-10-16 11:43:33 +02:00

README.md

MQTT Benchmarking Tool

A simple MQTT benchmarking tool for Mainflux platform.

It connects Mainflux things as subscribers over a number of channels and uses other Mainflux things to publish messages and create MQTT load.

Mainflux things used must be pre-provisioned first, and Mainflux provision tool can be used for this purpose.

Installation

cd tools/mqtt-bench
make

Usage

The tool supports multiple concurrent clients, publishers and subscribers configurable message size, etc:

./mqtt-bench --help
Tool for extensive load and benchmarking of MQTT brokers used within Mainflux platform.
Complete documentation is available at https://docs.mainflux.io

Usage:
  mqtt-bench [flags]

Flags:
  -b, --broker string     address for mqtt broker, for secure use tcps and 8883 (default "tcp://localhost:1883")
      --ca string         CA file (default "ca.crt")
  -c, --config string     config file for mqtt-bench (default "config.toml")
  -n, --count int         Number of messages sent per publisher (default 100)
  -f, --format string     Output format: text|json (default "text")
  -h, --help              help for mqtt-bench
  -m, --mainflux string   config file for Mainflux connections (default "connections.toml")
      --mtls              Use mtls for connection
  -p, --pubs int          Number of publishers (default 10)
  -q, --qos int           QoS for published messages, values 0 1 2
      --quiet             Supress messages
  -r, --retain            Retain mqtt messages
  -z, --size int          Size of message payload bytes (default 100)
  -t, --skipTLSVer        Skip tls verification
  -t, --timeout           Timeout mqtt messages (default 10000)

Two output formats supported: human-readable plain text and JSON.

Before use you need a mfconn.toml - a TOML file that describes Mainflux connection data (channels, thingIDs, thingKeys, certs). You can use provision tool (in tools/provision) to create this TOML config file.

go run tools/mqtt-bench/cmd/main.go -u test@mainflux.com -p test1234 --host http://127.0.0.1 --num 100 > tools/mqtt-bench/mfconn.toml 

Example use and output

Without mtls:

go run tools/mqtt-bench/cmd/main.go --broker tcp://localhost:1883 --count 100 --size 100 --qos 0 --format text --pubs 10 --mainflux tools/mqtt-bench/mfconn.toml

With mtls go run tools/mqtt-bench/cmd/main.go --broker tcps://localhost:8883 --count 100 --size 100 --qos 0 --format text --pubs 10 --mainflux tools/mqtt-bench/mfconn.toml --mtls -ca docker/ssl/certs/ca.crt


You can use `config.toml` to create tests with this tool:

go run tools/mqtt-bench/cmd/main.go --config tools/mqtt-bench/config.toml


Example of `config.toml`:

[mqtt] [mqtt.broker] url = "tcp://localhost:1883"

[mqtt.message] size = 100 format = "text" qos = 2 retain = true

[mqtt.tls] mtls = false skiptlsver = true ca = "ca.crt"

[test] pubs = 3 count = 100

[log] quiet = false

[mainflux] connections_file = "mfconn.toml"


Based on this, a test scenario is provided in `templates/reference.toml` file.