stress-injector 0.9

Creator: bradpython12

Last updated:

0 purchases

stress-injector 0.9 Image
stress-injector 0.9 Images

Languages

Categories

Add to Cart

Description:

stressinjector 0.9

Stress Injector
Python module, to inject memory, CPU and URL stress.

Insights about CPU Stress

To achieve CPU stress, I have used multiprocess, looped for the number of logical cores, triggering an infinite loop on
each core.
The infinite loop will run for a given number of seconds (provided by the user)
Mean-while the cpu_percent from psutil runs (in a dedicated thread) in an infinite loop calculating the current CPU
utilization on each CPU core.
The dedicated thread runs for 3 seconds in addition to the number of seconds provided by the user.
Once the given number of seconds have passed, the processes and threads initiated to monitor CPU usage are stopped.




Insights about Memory Stress

In this script, I have used numpy.random.bytes which are sampled from uniform distribution.
These random bytes are collected from the machine's physical memory increasing the program's usage.
I have then used getrusage (get resource usage) for SELF to get the memory consumed only by the current script.
The size_converter converts the bytes from resource usage to a human understandable format.




Insights about URL Stress

In this script, I have used threadpools to make concurrent requests.
The script uses requests module to make calls.
Takes arguments

rate: Number of calls to make. Defaults to 100K
timeout: Timeout for each request. Defaults to 0.5
retry_limit: Retry limit if the system is unable to spinup more threads. Defaults to 5
circuit_break: Wait time in seconds between retries. Defaults to 5
request_type: Function from requests module.




Usage
pip install stress-injector
CPU Stress
import stressinjector as injector


if __name__ == '__main__':
injector.CPUStress(seconds=300)

Memory Stress
import stressinjector as injector


if __name__ == '__main__':
injector.MemoryStress(gigabytes=2_000)

URL Stress
import os
import stressinjector as injector


if __name__ == '__main__':
injector.URLStress(url='http://0.0.0.0:5002/') # Stress test GET calls

# Stress test POST calls, also supports PUT, and DELETE
sample_data = {'headers': {'Authorization': 'Bearer %s' % os.environ.get('TOKEN')}}
injector.URLStress(
url='http://0.0.0.0:5002/',
request_type=injector.RequestType.post,
**sample_data
)


This module can only induce stress on a given URL by making N number of calls. Suitable for APIs running on localhost.
To perform a real-time load test, refer locust.io

Coding Standards
Docstring format: Google
Styling conventions: PEP 8
Clean code with pre-commit hooks: flake8 and
isort
Release Notes
Requirement
python -m pip install gitverse

Usage
gitverse-release reverse -f release_notes.rst -t 'Release Notes'

Linting
PreCommit will ensure linting, and the doc creation are run on every commit.
Requirement

pip install --no-cache sphinx==5.1.1 pre-commit recommonmark

Usage

pre-commit run --all-files

Pypi Package

https://pypi.org/project/stress-injector/
Runbook

https://thevickypedia.github.io/stress-injector/
License & copyright
© Vignesh Sivanandha Rao
Licensed under the MIT License

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.