Source code for adhocracy_core.stats.subscriber

"""Send counter runtime statistics to statsd server."""
from functools import partial
from pyramid.events import ApplicationCreated
from pyramid.events import NewRequest
from pyramid.threadlocal import get_current_registry
from substanced.stats import statsd_incr
from adhocracy_core.resources.principal import IPasswordReset
from adhocracy_core.resources.principal import IUser
from adhocracy_core.interfaces import IResourceCreatedAndAdded


[docs]def incr_event_metric(name: str, rate: float, event: object): """Increment statsd metric `name`. :param `name`: the metric name send to the stats server :param `rate`: sample rate (>=0 and <= 1) to reduce the number of values :param `event`: object with optional `registry` attribute to retrieve the pyramid registry. """ registry = getattr(event, 'registry', None) if registry is None: registry = get_current_registry() statsd_incr(name, value=1, rate=rate, registry=registry)
incr_started = partial(incr_event_metric, 'app.started', 1) incr_resource_created = partial(incr_event_metric, 'resources.created', .1) incr_pwordreset_created = partial(incr_event_metric, 'pwordresets.created', 1) incr_user_created = partial(incr_event_metric, 'users.created', 1)
[docs]def incr_requests(event): """Increment statsd metrics to count requests.""" method = event.request.method.lower() path = event.request.path name = 'requests.' + method if path == '/batch': name += '.batch' incr_event_metric(name, .1, event)
[docs]def includeme(config): """Include subscriber to send runtime statistics.""" config.add_subscriber(incr_started, ApplicationCreated) config.add_subscriber(incr_requests, NewRequest) config.add_subscriber(incr_resource_created, IResourceCreatedAndAdded) config.add_subscriber(incr_pwordreset_created, IResourceCreatedAndAdded, object_iface=IPasswordReset) config.add_subscriber(incr_user_created, IResourceCreatedAndAdded, object_iface=IUser)