A set of decorators and helper methods for adding statsd metrics to applications.
Project description
Statsdecor
A set of decorators and helper methods for adding statsd metrics to applications.
Installation
You can use pip to install statsdecor:
pip install statsdecor
Configuration
You must use statsdecor.configure
to configure the internal statsd client before
calling other methods:
import statsdecor
statsdecor.configure(host='localhost', prefix='superapp.')
Configuration is generally setup during your application's bootstrap. Once
set configuration values are re-used in all clients that statsdecor
creates.
Usage
You can track metrics with either the module functions, or decorators. Incrementing and decrementing counters looks like:
Metric functions
import statsdecor
statsdecor.incr('save.succeeded')
statsdecor.decr('attempts.remaining')
statsdecor.gauge('sessions.active', 9001)
Counters and timers can also be set through decorators:
import statsdecor.decorators as stats
@stats.increment('save.succeeded')
def save(self):
pass
@stats.decrement('attempts.remaining')
def attempt():
pass
@stats.timed('api_request.duration')
def perform_request(self, req)
pass
When using decorators, metrics are only tracked if the decorated function does not raise an error.
Context
Statsdecor includes a context manager that can help measure latency and volume while using metric tags to classify their success & failure. For example, suppose you are making a call to a remote service and wish to write a wrapper that collects latency, volume and failure metrics.
With our knowledge about how the client library indicates errors we can make a context manager based on StatsContext:
from statsdecor.context import StatsContext
class FoobarClientMetrics(StatsContext):
def __init__(self, tags=None):
tags = list(tags or [])
tags += ['caller:example_1']
super(ThingyStatsContext, self).__self__('thingy_client', tags=tags)
def exit_hook(self, exc_type, exc_val, exc_tb):
if exc_val is not None:
self.add_tags('result:failure')
else:
self.add_tags('result:success')
# Bonus: since we have the exception, classify the error type
if isinstance(exc_val, PermissionDenied):
self.add_tags('error:permissiondenied')
elif isinstance(exc_val, TimeOut):
self.add_tags('error:timeout')
elif exc_val is not None:
self.add_tags('error:exception')
Now writing wrapper functions with metrics is simple:
def foobar_get_clients(**args):
with FoobarClientMetrics(tags=['method:get_clients']) as stats:
result = call_foobar_get_client(**args)
# We know all foo methods return result['status_code'] so let's
# add a status_code tag!
stats.add_tags('status_code:{}'.format(result["status_code"]'))
return result
def foobar_add_client(**args):
with FoobarClientMetrics(tags=['method:add_client']) as stats:
result = call_foobar_add_client(**args)
stats.add_tags('status_code:{}'.format(result["status_code"]'))
return result
Now we can graph:
- volume of calls grouped by the
method
tag - average response time, excluding errors (timeouts will no longer skew the average)
- volume of errors grouped by method, and/or type
Development
Testing and coverage
make test
make coverage
You can track metrics with either the module functions, or decorators. Incrementing
Releasing
statsdecor uses semver for version numbers. Before tagging, check for all changes since the last tag for breaking changes, new features, and/or bugfixes.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file statsdecor-0.4.1.tar.gz
.
File metadata
- Download URL: statsdecor-0.4.1.tar.gz
- Upload date:
- Size: 11.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.4.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.8.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | eca8f842515b345b3cbc1364fa140c8c52fedb123f1fcc6eaa20723f0b401157 |
|
MD5 | f0b7ca5856e845876b05c9d1c538a1d0 |
|
BLAKE2b-256 | 9c8dc5304d981a3bfd41a9fb97ee6ee562ac0289794dfda4487ca2685301fad3 |
File details
Details for the file statsdecor-0.4.1-py2.py3-none-any.whl
.
File metadata
- Download URL: statsdecor-0.4.1-py2.py3-none-any.whl
- Upload date:
- Size: 7.5 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.4.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.8.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b0b81412f8f26f2a6ce2d597e142883493ca5b312481f1f19350c11a674f660a |
|
MD5 | c5e60b09531d6fec7498d076e6bd3669 |
|
BLAKE2b-256 | 1372e6b323412bf6186d0e631885e288c8e0b955bbf6c348d62dd1db2c5fa72c |