feat: add configurable UCE error pages
This commit is contained in:
@@ -71,6 +71,30 @@ void render_request_failure(Request& request, String title, String details, Stri
|
||||
Request* previous_context = set_active_request(request);
|
||||
clear_request_output(request);
|
||||
|
||||
if(!request.resources.is_cli)
|
||||
{
|
||||
DTree error_info;
|
||||
error_info["type"] = "runtime_error";
|
||||
error_info["title"] = title;
|
||||
error_info["details"] = details;
|
||||
error_info["source"] = request.params["SCRIPT_FILENAME"];
|
||||
error_info["request_uri"] = first(request.params["REQUEST_URI"], request.params["SCRIPT_FILENAME"]);
|
||||
if(request.server && request.params["SCRIPT_FILENAME"] != "")
|
||||
error_info["generated_cpp"] = compiler_generated_cpp_path(&request, request.params["SCRIPT_FILENAME"]);
|
||||
if(request_fault_signal != 0)
|
||||
{
|
||||
error_info["signal"] = (f64)request_fault_signal;
|
||||
error_info["signal_name"] = signal_name((int)request_fault_signal);
|
||||
}
|
||||
error_info["trace"] = trace;
|
||||
if(compiler_render_error_page(&request, "page_runtime_error", status_code, "Internal Server Error", error_info))
|
||||
{
|
||||
request.err = "UCE runtime error: " + title + (details != "" ? " (" + details + ")" : "");
|
||||
restore_active_request(previous_context);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
String body;
|
||||
body += "UCE runtime error\n";
|
||||
body += "Request: " + first(request.params["REQUEST_URI"], request.params["SCRIPT_FILENAME"]) + "\n";
|
||||
@@ -902,6 +926,9 @@ int handle_complete(FastCGIRequest& request) {
|
||||
failure_title = "fatal signal during request";
|
||||
failure_details = "worker recovered before closing the upstream connection";
|
||||
failure_trace = backtrace_frames_string(request_fault_frames, request_fault_frame_count, 1);
|
||||
// The siglongjmp skipped UnitInvocationScope's destructor, so the
|
||||
// worker may still sit in the crashed unit's source directory.
|
||||
cwd_set(process_start_directory());
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1508,6 +1535,7 @@ int main(int argc, char** argv)
|
||||
// Warm up libgcc's backtrace state so the first in-handler backtrace()
|
||||
// after a fault does not allocate.
|
||||
backtrace(request_fault_frames, 4);
|
||||
process_start_directory();
|
||||
|
||||
init_base_process();
|
||||
ensure_proactive_compiler();
|
||||
|
||||
Reference in New Issue
Block a user