= django-processinfo

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: https://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.

== TODO ==

Add unittests


== screenshots ==


Here [[https://github.com/jedie/jedie.github.io/tree/master/screenshots/django-processinfo|some screenshots (from v0.2 - 19.08.2011)]] how it looks like:

----

{{https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/django-processinfo/20110819_django-processinfo-1.png|Screenshot 1}}

----

{{https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/django-processinfo/20110819_django-processinfo-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 = (
    'django_processinfo.middlewares.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]]


== developer info

e.g.:
{{{
~$ git clone https://github.com/jedie/django-processinfo.git
~$ cd django-processinfo
~/django-processinfo$ make
help                 List all commands
install-poetry       install or update poetry
install              install PyInventory via poetry
update               update the sources and installation
lint                 Run code formatters and linter
fix-code-style       Fix code formatting
tox-listenvs         List all tox test environments
tox                  Run pytest via tox with all environments
tox-py36             Run pytest via tox with *python v3.6*
tox-py37             Run pytest via tox with *python v3.7*
tox-py38             Run pytest via tox with *python v3.8*
pytest               Run pytest
update-rst-readme    update README.rst from README.creole
publish              Release new version to PyPi
run-dev-server       Run the django dev server in endless loop.
}}}

=== run test project

There exists a test project that can be easy run localy using the django dev. server and SQLite database.
To run this project, do this:
{{{
~/django-processinfo$ make run-dev-server
}}}
You must also setup a test user, call this:
{{{
~/django-processinfo$ ./manage.sh createsuperuser
}}}

== Django compatibility

|= Version |= Python  |= Django
| v0.9.0   | python 3 | django v2.2 LTS
| v0.8.0   | python 3 | django v1.11 LTS
| v0.7.0   | python 2 | django v1.5
| v0.6.1   | python 2 | django v1.4

== history ==


* *dev* - [[https://github.com/jedie/django-processinfo/compare/v0.9.0...master|compare v0.9.0...master]]
** modernize project setup using poetry
** Add a test project
** upgrade code style
** TBC
* v0.9.0 - 26.02.2020 - [[https://github.com/jedie/django-processinfo/compare/v0.8.0...v0.9.0|compare v0.8.0...v0.9.0]]
** Updates for Django 2.2
* v0.8.0 - 09.03.2018 - [[https://github.com/jedie/django-processinfo/compare/v0.7.1...v0.8.0|compare v0.7.1...v0.8.0]]
** Updates for Python v3 and Django 1.11
* v0.7.1 - 20.08.2015 - [[https://github.com/jedie/django-processinfo/compare/v0.6.3...v0.7.1|compare v0.6.3...v0.7.1]]
** Changes for django 1.5 support
** change setup install_requires to Django v1.3.x - v1.5.x
** Bugfix in templates: missed i18n
* v0.6.3 - 24.08.2012
** remove auto commit date from version
* v0.6.2
** Auto cleanup ProcessInfo table to protect against overloading.
** Don't insert django-processinfo "time cost" info if response.status_code is not 200
* v0.6.1
** Tested also with django v1.4
** change setup install_requires to Django v1.3.x - v1.4.x
* v0.6.0
** Add "Reset all data" in object tools.
** Make "Remove dead PIDs" and "Reset all data" available on both admin pages.
* v0.5.2
** [[https://github.com/jedie/django-processinfo/issues/4|Bugfix if no SWAP used.]]
* v0.5.1
** Add "Remove dead PIDs" as admin view in "Process statistics" object tools (top, right, grey links)
* 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

* [[https://www.paypal.me/JensDiemer|paypal.me/JensDiemer]]
* [[https://flattr.com/submit/auto?uid=jedie&url=https%3A%2F%2Fgithub.com%2Fjedie%2Fdjango-reversion-compare%2F|Flattr This!]]
* Send [[http://www.bitcoin.org/|Bitcoins]] to [[https://blockexplorer.com/address/1823RZ5Md1Q2X5aSXRC5LRPcYdveCiVX6F|1823RZ5Md1Q2X5aSXRC5LRPcYdveCiVX6F]]


== links ==

| GitHub | https://github.com/jedie/django-processinfo
| PyPi   | http://pypi.python.org/pypi/django-processinfo

=== contact ===

Come into the conversation, besides the github communication features:

| Forum   | http://www.pylucid.org/en/forum/10/
| IRC     | #pylucid on freenode.net (Yes, the PyLucid channel...)
| webchat | http://webchat.freenode.net/?channels=pylucid

