https://github.com/nhairs/sliding-window-counter
Time based sliding window counter for Python
https://github.com/nhairs/sliding-window-counter
python python-library
Last synced: about 2 months ago
JSON representation
Time based sliding window counter for Python
- Host: GitHub
- URL: https://github.com/nhairs/sliding-window-counter
- Owner: nhairs
- License: mit
- Created: 2023-10-26T20:28:24.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-11-03T07:43:15.000Z (over 2 years ago)
- Last Synced: 2025-08-27T14:49:23.193Z (10 months ago)
- Topics: python, python-library
- Language: Shell
- Homepage:
- Size: 25.4 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Sliding Window Counter
[](https://pypi.python.org/pypi/sliding-window-counter/)
[](https://pypi.python.org/pypi/sliding-window-counter/)
[](https://github.com/nhairs/sliding-window-counter)
[](https://github.com/nhairs/sliding-window-counter)
`sliding-window-counter` provides time based sliding window counters. These are useful for tracking things like throughput metrics for long running applications.
## Installation
### Install via pip
```shell
pip3 install sliding-window-counter
```
## Quick Start
```python
## Creating Counters
## -----------------------------------------------------------------------------
import datetime as dt
from sliding_window_counter import SlidingWindowCounter
# Count across 1 minute with 5 second resolution
small_counter = SlidingWindowCounter(60, 5)
# Count across 1 hour with 1 minute resolution
long_counter = SlidingWindowCounter(dt.timedelta(hours=1), dt.timedelta(minutes=1))
# Count across 12 hours with 10 second resolution (not a good idea to be honest)
long_and_precise_counter = SlidingWindowCounter(dt.timdelta(hours=12), 10)
## Using Counters
## -----------------------------------------------------------------------------
import random
import time
mini_counter = SlidingWindowCounter(10, 1)
# fill it up and check it's state
for i in range(20):
add = random.randint(1,20)
mini_counter.increment(add)
print(f"{i:>3}s Added: {add:<3} Window: {mini_counter.current_total:<6} Total: {mini_counter.grand_total:<6} Avg: {mini_counter.current_throughput:>5.2f}/s")
time.sleep(1)
# Watch it drain
for i in range(12):
time.sleep(1)
print(f"Window: {mini_counter.current_total:<5} Total: {mini_counter.grand_total:<5} Avg: {mini_counter.current_throughput:>5.2f}/s")
```
## Bugs, Feature Requests etc
TLDR: Please [submit an issue on github](https://github.com/nhairs/sliding-window-counter/issues).
In the case of bug reports, please help me help you by following best practices [1](https://marker.io/blog/write-bug-report/) [2](https://www.chiark.greenend.org.uk/~sgtatham/bugs.html).
In the case of feature requests, please provide background to the problem you are trying to solve so to help find a solution that makes the most sense for the library as well as your usecase.
## Development
The only development dependency is bash and docker. All actions are run within docker for ease of use. See `./dev.sh help` for commands. Typical commands are `format`, `lint`, `test`, `repl`, `build`.
I am still working through open source licencing and contributing, so not taking PRs at this point in time. Instead raise and issue and I'll try get to it as soon a feasible.
## Licence
This project is licenced under the MIT Licence - see [`LICENCE`](https://github.com/nhairs/sliding-window-counter/blob/master/LICENCE).
This project may include other open source licenced software - see [`NOTICE`](https://github.com/nhairs/sliding-window-counter/blob/master/NOTICE).
## Authors
A project by Nicholas Hairs - [www.nicholashairs.com](https://www.nicholashairs.com).