diff --git a/django_statsd/models.py b/django_statsd/models.py index 3aedbb3..ac5c642 100644 --- a/django_statsd/models.py +++ b/django_statsd/models.py @@ -1,5 +1,40 @@ -from .celery import register_celery_events from django.conf import settings +from django.db.models.signals import post_save, post_delete +from django_statsd.clients import statsd + +from .celery import register_celery_events + if getattr(settings, 'STATSD_CELERY_SIGNALS', False): register_celery_events() + + +def model_save(sender, **kwargs): + """ + Handle ``save`` events of all Django models. + """ + instance = kwargs.get('instance') + + # Increase statsd counter. + statsd.incr('models.%s.%s.%s' % ( + instance._meta.app_label, + instance._meta.object_name, + 'create' if kwargs.get('created', False) else 'update', + )) + + +def model_delete(sender, **kwargs): + """ + Handle ``delete`` events of all Django models. + """ + instance = kwargs.get('instance') + + # Increase statsd counter. + statsd.incr('models.%s.%s.delete' % ( + instance._meta.app_label, + instance._meta.object_name, + )) + +if getattr(settings, 'STATSD_MODEL_SIGNALS', True): + post_save.connect(model_save) + post_delete.connect(model_delete) diff --git a/docs/index.rst b/docs/index.rst index d75afde..e137221 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -209,6 +209,14 @@ would look that up on the graphite server with the key:: stats.addons.view.GET +Django Model save and delete integration +---------------------------------------- + +You can log all create, update and delete events of django models. +Add to your Django settings:: + + STATSD_MODEL_SIGNALS = True + Celery signals integration -------------------------- @@ -219,7 +227,6 @@ To enable this, add the following to your Django settings:: STATSD_CELERY_SIGNALS = True - Front end timing integration ----------------------------