From 46b517f360122c3c2d010bb059dd016cdd8a1b26 Mon Sep 17 00:00:00 2001 From: Greg Price Date: Fri, 13 Jun 2008 04:03:01 -0400 Subject: [PATCH] one world, one error-reporting mechanism The email and the web page show the same information from the same template, with the web page adding chrome and a little text. The same code path handles CodeErrors and other exceptions. svn path=/trunk/packages/sipb-xen-www/; revision=602 --- code/main.py | 35 ++++++++++------------------------- code/templates/error_raw.tmpl | 1 - 2 files changed, 10 insertions(+), 26 deletions(-) diff --git a/code/main.py b/code/main.py index dd6b867..646f7d0 100755 --- a/code/main.py +++ b/code/main.py @@ -118,7 +118,7 @@ class Defaults: DEFAULT_HEADERS = {'Content-Type': 'text/html'} def error(op, username, fields, err, emsg, traceback): - """Print an error page when a CodeError occurs""" + """Print an error page when an exception occurs""" d = dict(op=op, user=username, fields=fields, errorMessage=str(err), stderr=emsg, traceback=traceback) details = templates.error_raw(searchList=[d]) @@ -584,7 +584,7 @@ def unauthFront(_, _2, fields): def throwError(_, __, ___): """Throw an error, to test the error-tracing mechanisms.""" - raise CodeError("test of the emergency broadcast system") + raise RuntimeError("test of the emergency broadcast system") mapping = dict(list=listVms, vnc=vnc, @@ -676,35 +676,20 @@ class App: output_string = str(output) checkpoint.checkpoint('output as a string') except Exception, err: - import traceback if not fields.has_key('js'): - if isinstance(err, CodeError): - self.start('500 Internal Server Error', [('Content-Type', 'text/html')]) - e = revertStandardError() - s = error(operation, self.username, fields, - err, e, traceback.format_exc()) - yield str(s) - return if isinstance(err, InvalidInput): self.start('200 OK', [('Content-Type', 'text/html')]) e = revertStandardError() yield str(invalidInput(operation, self.username, fields, err, e)) return - self.start('500 Internal Server Error', [('Content-Type', 'text/plain')]) - send_error_mail('xvm error: %s' % (err,), - '%s\n' % (traceback.format_exc(),)) - yield '''Uh-oh! We experienced an error. -Sorry about that. We've gotten mail about it. - -Feel free to poke us at xvm@mit.edu if this bug is -consistently biting you and we don't seem to be fixing it. - -In case you're curious, the gory details are here. ----- -%s ----- -%s -----''' % (str(err), traceback.format_exc()) + import traceback + self.start('500 Internal Server Error', + [('Content-Type', 'text/html')]) + e = revertStandardError() + s = error(operation, self.username, fields, + err, e, traceback.format_exc()) + yield str(s) + return status = headers.setdefault('Status', '200 OK') del headers['Status'] self.start(status, headers.items()) diff --git a/code/templates/error_raw.tmpl b/code/templates/error_raw.tmpl index bd4db84..5ae1490 100644 --- a/code/templates/error_raw.tmpl +++ b/code/templates/error_raw.tmpl @@ -9,5 +9,4 @@ Error output: $stderr#slurp ---- end error output -Traceback: $traceback -- 1.7.9.5