Insert Django database queries in to a Timeline
Project description
timeline_django inserts actions in to a Timeline (http://pypi.python.org/pypi/timeline/) for Django db queries, and other events in Django. There is some setup required to have the events inserted in the right timeline for the context.
wsgi
When running under wsgi you need to do the following things. Firstly add:
timeline_django.middleware.TimelineMiddleware
to your middleware in settings.py. This will save the timeline for the request such that it is accessible to the db layer.
Then you need to change the way you set up your WSGI application in your WSGI script:
from timeline import wsgi as timeline_wsgi from timeline_django.setup import setup_for_requests as timeline_django_setup timeline_django_setup() application = timeline_wsgi.make_app(application)
This will cause timeline.wsgi to put a Timeline in the wsgi environ, and timeline_django to use that to log the requests.
Redaction
There are some queries that should generally be redacted from display in the timeline. To that end there are some methods for redacting sensitive info from standard Django, currently this covers:
Session info to prevent session hijacking
User info to prevent password disclosure
If you are using the timeline along with python-oops then you can call:
import oops_timeline from timeline_django.filters import install_hooks oops_timeline.install_hooks(config) install_hooks(config)
where config is your oops.Config instance, to set up the filtering.
N.B. be sure to install the oops_timeline hooks before the timeline_django hooks.
Other
If you are running in other environments you need to do some of these steps yourself. First you need to pick a point to create a new Timeline object. This needs to correspond to the start of an timeline that you want to capture. That may be at the start of a script, or it may be in response to some other event.
Once you have created the Timeline you need to store it somewhere it can be accessed when needed. That may be in a variable, or it may be in thread-local storage if you will have multiple threads handling separate timelines. Once you have the Timline stored you need a function that will return it. That function will be your timeline_factory. It should take no arguments and return a Timeline object, or None if there is no applicable Timeline when it is called.
Once you have that method then you can call timeline_django’s setup_for_requests method:
from timeline_django.setup import setup_for_requests setup_for_requests(timeline_factory=timeline_factory)
where timeline_factory is the function you created above. That will set up the hooks necessary to have an action recorded in your timeline when there is a DB query, or one of the other Django events that timeline_django supports.
Copyright (c) 2012, Canonical Ltd
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, version 3 only.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. GNU Lesser General Public License version 3 (see the file LICENSE).
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 timeline_django-0.0.1.tar.gz
.
File metadata
- Download URL: timeline_django-0.0.1.tar.gz
- Upload date:
- Size: 12.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7855091f6de1891b498dfa76a39468144485106f1f85b8f99d0040ef7a7f2633 |
|
MD5 | 286fec36bc7a4b455f4c24dcfa71e1f1 |
|
BLAKE2b-256 | 7e91b70b6c0db465609262e12701076596b339ed947193766bddeb3be3f8e1a1 |