Adds Error Handling and Realtime Runtime Reviewal (#4679)

* Adds Error Handler

Adds a /world/Error proc to handle runtime errors. This proc replaces
the normal runtime logging behavior, providing the following
improvements:

- Adds timestamps to runtimes
- Pads or omits certain lines
- Continues logging runtimes after the 99th (with less info, as provided
by BYOND)
- Adds ckey and accurate xyz to usr info
- Continues including usr info after 19th runtime
- Silences spammy runtimes (by default, a runtime that occurs 10 times
in 10 minutes gets ignored for the next 10 minutes)

* Adds runtime viewer

Also fixes a minor mistake in the error handler

* Sanitizes HTML in Error Viewer

Also removes the stray return from the end of the error handler

* Prettifies Error Viewer

Now uses browser datum and some extra bits of formatting, inspired by
the changes made by @PJB3005

* Error Handling Improvements

- Skipped error counts now show up in the error viewer
- Proper runtimes caught by a process are now sent to the main error
handler
- The error handler and viewer can now handle a provided src, such as
one from a processing runtime
- Moved some info generation into helper procs
This commit is contained in:
Krausus
2016-06-19 12:53:07 -04:00
committed by Fox McCloud
parent 1bedc13bcc
commit 30517a9b10
9 changed files with 360 additions and 2 deletions

View File

@@ -326,6 +326,11 @@
stat("[name]", "T#[getTicks()] | AR [averageRunTime] | LR [lastRunTime] | HR [highestRunTime] | D [cpu_defer_count]")
/datum/controller/process/proc/catchException(var/exception/e, var/thrower)
if(istype(e)) // Real runtimes go to the real error handler
// There are two newlines here, because handling desc sucks
e.desc = " Caught by process: [name]\n\n" + e.desc
world.Error(e, e_src = thrower)
return
var/etext = "[e]"
var/eid = "[e]" // Exception ID, for tracking repeated exceptions
var/ptext = "" // "processing..." text, for what was being processed (if known)