one world, one error-reporting mechanism
authorGreg Price <price@mit.edu>
Fri, 13 Jun 2008 08:03:01 +0000 (04:03 -0400)
committerGreg Price <price@mit.edu>
Fri, 13 Jun 2008 08:03:01 +0000 (04:03 -0400)
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
code/templates/error_raw.tmpl

index dd6b867..646f7d0 100755 (executable)
@@ -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())
index bd4db84..5ae1490 100644 (file)
@@ -9,5 +9,4 @@ Error output:
 $stderr#slurp
 ---- end error output
 
-Traceback:
 $traceback