-
Django has a code error notifications mechanism when a view raises an exception. It will email the people in ADMIN tuple(settings documentation) in settings.py with the full exception information and displays the default 500.html template.
This only happens when DEBUG=False in the settings.py.It's possible to set a handle that change this behavior with a handler500 variable in the root urls.py.
So, we can easily write a simple view that sends an error notification to our jabber account.First of all, you need to install xmpppy and dnspython:
$ easy_install xmpppy $ easy_install dnspython
Add to settings.py the jabber parameters such as the jabber id, password, recipient, etc.:
JABBER_ERROR_NOTIFICATION = True JABBER_ID = 'your_jabberid@jabberdomain.com' JABBER_PASSWORD = 'your_jabber_password' JABBER_RECIPIENT = 'recipient@jabberdomain.com' JABBER_ERROR_TEXT = 'An error occurred in "Project Name", please check your email.'
Start a new app named errors or something else and add it to the INSTALLED_APPS tuple in the settings.py:
python manage.py startapp errors
Add a handler500 variable with the view in the root urls.py:
handler500 = 'errors.views.server_error_jabber'
Finally add the view in errors.views that sends a jabber notification and returns a 500 error page:
from django.views.defaults import server_error from django.conf import settings import xmpp, time def server_error_jabber(request, template_name='500.html'): if settings.JABBER_ERROR_NOTIFICATION: jid = xmpp.protocol.JID(settings.JABBER_ID) cl = xmpp.Client(jid.getDomain(), debug=[]) conn = cl.connect() if conn: auth = cl.auth(jid.getNode(), settings.JABBER_PASSWORD, resource=jid.getResource()) if auth: id = cl.send(xmpp.protocol.Message(settings.JABBER_RECIPIENT, settings.JABBER_ERROR_TEXT)) # Some older servers will not send the message if you disconnect immediately after sending time.sleep(1) return server_error(request, template_name)NOTE: Don't forget to set DEBUG=False in the settings.py.
Comments
-

Cool stuff Nuno!
-

Thanks,
Actually, you are responsible for this idea, after I've listened the latest "This Week in Django" podcast by Michael Trier, that talked about your Pownce Jabber Bot. ;)
-

Very cool idea. Thanks. I'll be implementing this today.
-

I'm sure I will be using it. Thanks.
-

> handler500 = 'errors.views.server_error_jabber'
Nice, didn't know about this. Jabber integration for errors, neat idea.
-

sweet

My name is Nuno Mariz and this is my weblog. I'm a software engineer, living in Porto, Portugal. My interests are: 


