This release is a pre-release and may not be stable for production use.
This is how you Bench a Grape!
locust benchmarks for chatgrape with websockets/wamp and long polling as well as websocket stability reports.
Installation from PyPi Package
pip install benchgrape
virtualenv recommended, see below
PyPi package installation in virtualenv
pip3 install virtualenv
mkdir benchgrape
cd benchgrape
virtualenv -p python3 .
source ./bin/activate
pip install benchgrape
benchgrape --help
Upgrading
pip install --upgrade benchgrape
Deployments (currently broken and not maintained)
Docker
Included is a basic Dockerfile for building and distributing Bench Grape,
and can be built with the included make helper:
make docker
docker run -it benchgrape --help
Usage
Test Websocket Stability
connect a good amount of websockets to a server and monitor their stability. can be done with a single user which is passed in the args.
benchgrape benchmark websocket-stability --url http://localhost --port 8000 --username admin --password 'quote-if-special-chars' --org 1 --websockets 10 --activity mechanical_keyboard
go to the web interface and have fun
Single User Benchmark
does crazy requests and tries to massacre your grape server
benchgrape benchmark single-user --url http://localhost --port 8000 --username admin --password admin --org 1 --websockets 10 --activity mechanical_keyboard
Multi User Benchmark
This feature is work in progress! Login multiple different users
Generating Credentials in Grape for multiple users
grape@deploy:/srv/grape$ python manage.py shell_plus
# do not user all users, use "filter" for bechmark users!
import json
tokens = []
for u in User.objects.all():
t, _=Token.objects.get_or_create(user=u)
tokens.append(t.key)
data = {
'tokens': tokens,
}
with open('/tmp/benchmark_tokens.json', 'w') as outfile:
json.dump(data, outfile)
exit
exit
docker cp 1504c01d3679:/tmp/benchmark_tokens.json ~/workspace/benchgrape/
running multiuser mode
benchgrape benchmark multi-user --url http://localhost --port 8000 --username admin --password admin --org 1 --websockets 10 --activity mechanical_keyboard --tokens ./benchmark_tokens.json
Start the configured Benchmark
- visit http://localhost:8089/
- select amount of users/(which is connections for websocket stability), f.e. 100
- select hatch rate, this is the amount of users per second which will connect. weaker systems should not go over 10.
- start and watch.
- logs in ./logs/stats.log and ./logs/debug.log
Master Slave Setups
using locust directly for master-slave setup, currently:
locust --help
-
running one process of locust is bound to 1 CPU max and handles roughly 500 users per CPU core. for serious stuff you need to check how much CPU your python request process uses, if it hits the 90s, proceed with master/slave setup.
-
start one master like this:
benchgrape benchmark single-user --master --url http://localhost --port 8000 --username admin --password admin --org 1 --websockets 10 --activity mechanical_keyboard -
start at least one slave like this:
locust --slave --master-host=MASTER_HOST_OR_IP
Interpreting the Result
Type Name # Requests # Fails Median (ms) Average (ms) Min (ms) Max (ms) Average size (bytes) Current RPS
WebSocket Recv 100 0 0 0 0 0 51 0
GET /api/accounts/session/ 100 0 290 336 251.3880729675293 953.8741111755371 356 0
WebSocket Recv ping 211 0 -9977 -9984 -10001 0 19 10
WebSocket Sent ping 211 0 0 0 0 0 33 10
Total 622 0 0 -3333 -10001 953.8741111755371 83 20
there should be no # Fails and no WEBSOCKET_DROP events in the list. only
-
WebSocket Recv -
GET /api/accounts/session/ -
WebSocket Sent Ping -
WebSocket Recv Ping -
the hostname is passed in the locust command and taken from there.
-
heads up: if 2fa is on, the login wont work. you need to pass the token directly.
Development
cd benchgrape
python3 -m pip install --upgrade pip
virtualenv -p python3 venv
source venv/bin/activate
pip install -r requirements.txt
pip install -r requirements-dev.txt
python setup.py develop # -> uses the live code for development
benchgrape --help # see if the command line tool is linked and works
make test
Revert an installed package to continue development, switch between
python setup.py install
python setup.py develop
Releasing to PyPi
Before releasing to PyPi, you must either configure your login credentials or you will be prompted every time upon upload
~/.pypirc:
[pypi]
username = YOUR_USERNAME
password = YOUR_PASSWORD
Then use the included helper function via the Makefile:
make dist
make dist-upload
Metadata
Release files for benchgrape 0.0.13.dev20200328163950
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| benchgrape-0.0.13.dev20200328163950.tar.gz | 20.2 kB | Without provenance | Details for benchgrape-0.0.13.dev20200328163950.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| benchgrape-0.0.13.dev20200328163950-py3-none-any.whl | Python 3 | none | any | Details for benchgrape-0.0.13.dev20200328163950-py3-none-any.whl |
Total release size: 43.7 kB
Release files / benchgrape-0.0.13.dev20200328163950.tar.gz
| Download URL | benchgrape-0.0.13.dev20200328163950.tar.gz |
|---|---|
| Size | 20.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
513be4da68651db826b121884a949bd51603c4f181e6380642a652bfd1fec173
|
|
BLAKE2b-256 checksum How to use checksums |
b3596762f7d1a17a2f31ac170f197c46ee89cb92734ef9f61d2c90450a230872
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.0.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.7.3
|
Release files / benchgrape-0.0.13.dev20200328163950-py3-none-any.whl
| Download URL | benchgrape-0.0.13.dev20200328163950-py3-none-any.whl |
|---|---|
| Size | 23.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e09a163cf6deb2bfa3cb02f6af1890ee009eef3e20ef69880eba80c40c7fe32d
|
|
BLAKE2b-256 checksum How to use checksums |
62ef33f81df94027a2d5bf516ec3757bae07d5790b612b54984ac97efc7c6b74
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.0.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.7.3
|
Security for benchgrape 0.0.13.dev20200328163950
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.