Performance metrics for Pyramid using StatsD
Project description
Performance metrics for Pyramid using StatsD. The project aims at providing ways to instrument a Pyramid application in the least intrusive way.
Bitbucket: https://bitbucket.org/Ludia/pyramid_metrics
Installation
Install using setuptools, e.g. (within a virtualenv):
$ pip install pyramid_metrics
Setup
Once pyramid_metrics is installed, you must use the config.include mechanism to include it into your Pyramid project’s configuration. In your Pyramid project’s __init__.py:
config = Configurator(.....)
config.include('pyramid_metrics')
Alternately you can use the pyramid.includes configuration value in your .ini file:
[app:myapp]
pyramid.includes = pyramid_metrics
Usage
Pyramid_metrics configuration (values are defaults):
[app:myapp]
metrics.host = localhost
metrics.port = 8125
metrics.prefix = application.stage
metrics.route_performance = true
Route performance
If enabled, the route performance feature will time the request processing. By using the StatsD Timer type metric, pre-aggregation will provide information on latency, rate and total number. The information is sent two times: per route and globally.
The key name is composed of the route name, the HTTP method and the outcome (as HTTP status code or ‘exc’ for exception).
Global key request.<HTTP_METHOD>.<STATUS_CODE_OR_EXC>
Per route key route.<ROUTE_NAME>.request.<HTTP_METHOD>.<STATUS_CODE_OR_EXC>
API
Counter
StatsD type: https://github.com/etsy/statsd/blob/master/docs/metric_types.md#counting
# Increment a counter named cache.hit by 1
request.metrics.incr('cache.hit')
# Increment by N
request.metrics.incr(('cache.hit.read.total', count=len(cacheresult)))
# Stat names can be composed from list or tuple
request.metrics.incr(('cache', cache_action))
Timer
StatsD type: https://github.com/etsy/statsd/blob/master/docs/metric_types.md#timing
# Simple timing
time_in_ms = requests.get('http://example.net').elapsed.microseconds/1000
request.metrics.timing('net.example.responsetime', time_in_ms)
# Using the time marker mechanism
request.metrics.marker_start('something_slow')
httpclient.get('http://example.net')
request.metrics.marker_stop('something_slow')
# Measure different outcome
request.metrics.marker_start('something_slow')
try:
httpclient.get('http://example.net').raise_for_status()
except:
# Send measure to key 'something_slow.error'
request.metrics.marker_stop('something_slow', suffix='error')
else:
# Send measure to key 'something_slow.ok'
request.metrics.marker_stop('something_slow', suffix='ok')
# Using the context manager
with request.metrics.timer(['longprocess', processname]):
run_longprocess(processname)
# Send measure to 'longprocess.foobar' or 'longprocess.foobar.exc'
Currently implemented
Collection utility as a request method
Ability to send metrics per Pyramid route
Simple time marker mechanism
Simple counter
Context manager for Timing metric type
TODO
Full StatsD metric types
Extensions for automatic metrology (SQLAlchemy, MongoDB, Requests…)
Whitelist/blacklist of metrics
Time allocation per subsystem (using the time marker mechanism)
Considerations
The general error policy is: always failsafe. Pyramid_metrics should NEVER break your application.
The DNS resolution is done during configuration to avoid recurring latencies.
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
File details
Details for the file pyramid_metrics-0.2.0.tar.gz
.
File metadata
- Download URL: pyramid_metrics-0.2.0.tar.gz
- Upload date:
- Size: 9.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9338cb4bf35c08b04e3f8855584ae0b71a32344f268d359a352283a38dd9beaf |
|
MD5 | 13e105bf01ec88b132f0dc5e09d7bb26 |
|
BLAKE2b-256 | dc6478d80f1deea976a50696dbcc501b5fd2533c2cf099404e6fdb83bed4e548 |