django-processinfo is a reuseable Django application for collecing information about the running server processes.
We try to cause as little additional overhead: django-processinfo creates most of the time only one database query to update the data.

The most important data that django-processinfo will be captured:

* Process statistics:
** process PID, start time, life times
** Number of average/max living processes
** min/average/max response times
** Total request/exceptions count
* Memory statistics:
** min/average/max memory usage (VmRSS, VmPeak)
* System informations:
** System memory usage
** Swap usage
** load average

django-processinfo splits some of these data per SITE_ID, so you can see e.g. which site is mostly used.

What is it not:
* track user actions
* collect infos which are found in e.g. apache.log
* Its not a sourcecode profiler (read [[https://code.djangoproject.com/wiki/ProfilingDjango]])

more info: http://www.python-forum.de/viewtopic.php?f=6&t=27168 (de)


== limitation ==

This only works, if **/proc/$$/status** exists. So only on unix/linux like platforms, yet.


== screenshots ==

Here [[http://www.pylucid.org/permalink/340/pylucid-screenshots/django-processinfo/|some screenshots (from v0.2 - 19.08.2011)]] how it looks like:

----

{{http://www.pylucid.org/media/screenshots_PyLucid/django-processinfo/django-processinfo20110819-1.png|Screenshot 1}}

----

{{http://www.pylucid.org/media/screenshots_PyLucid/django-processinfo/django-processinfo20110819-2.png|Screenshot 2}}


== install ==

1. install it e.g.:
{{{
pip install django-processinfo
}}}

2. add settings (see below)

3. create tables (run syncdb)


== settings ==

add this to your settings.py:
{{{
import os

import django_processinfo


INSTALLED_APPS = (
	...
	'django_processinfo',
	...
)

MIDDLEWARE_CLASSES = (
    'django_processinfo.middlewares.django_processinfo.ProcessInfoMiddleware',
    ...
)

# Put templates above admin contrib, e.g.:
TEMPLATE_DIRS = (
	...
    os.path.join(os.path.abspath(os.path.dirname(django_processinfo.__file__)), "templates/"),
    ...
)

# include app settings from ./django_processinfo/app_settings.py
from django_processinfo import app_settings as PROCESSINFO

# Change settings like this:
PROCESSINFO.ADD_INFO = True
}}}

=== ProcessInfoMiddleware ===

The **ProcessInfoMiddleware** can actually be inserted anywhere.
However, it should be added far above. Thus, to capture everything.

For performance enhancement, you can put **ProcessInfoMiddleware** after **LocalSyncCacheMiddleware**.
But then, however, lacks statistical values on every cache hit!

=== app settings ===

Available django-processinfo settings can you found in [[https://github.com/jedie/django-processinfo/blob/master/django_processinfo/app_settings.py|./django_processinfo/app_settings.py]]


== history ==

* v0.5.0
** Model changes: Please recreate tables, e.g.: {{{ ./manage.py reset django_processinfo }}}
** New: Display some static system informations (uname, domain name, ip adress, python version, sys.prefix)
** New: current living processes (also per site)
** display sum of user/system mode time
* v0.4.1
** Bugfix for UnicodeEncodeError in setup: Use new solution, see: https://code.google.com/p/python-creole/wiki/UseInSetup
* v0.4
** Bugfix with "Total created processes"
** Display "Process lifetime"
* v0.3.0
** Display some system information from /proc/meminfo and 'load average'
** Many Bugfixes
* v0.2.0
** Many things changes! Recreate tables, e.g: {{{ ./manage.py reset django_processinfo }}}
* v0.1.0
** first Version


== donation ==

If you like it, send some [[http://www.bitcoin.org/|Bitcoins]] to [[https://blockexplorer.com/address/1J2gfYNSjpB9P7EkpTVWUY3rWQCpbfjEhX|1J2gfYNSjpB9P7EkpTVWUY3rWQCpbfjEhX]] ;)


== links ==

| GitHub | https://github.com/jedie/django-processinfo
| PyPi   | http://pypi.python.org/pypi/django-processinfo
| IRC    | [[http://www.pylucid.org/permalink/304/irc-channel|#pylucid on freenode.net]]

