From 6badbb3227701f93aeebf208cc47f8b1540617da Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Fri, 21 Jun 2013 17:38:33 -0700 Subject: [PATCH] Added the error handling screen This page gets displayed when we throw an unhandled exception. --- core/pom.xml | 2 +- core/src/main/java/hudson/WebAppMain.java | 2 +- .../impl/InstallUncaughtExceptionHandler.java | 30 ++++++++++ .../java/hudson/util/PluginServletFilter.java | 1 + core/src/main/java/jenkins/model/Jenkins.java | 1 + .../jenkins/model/Jenkins/oops.jelly | 56 ++++++++++++++++++ .../jenkins/model/Jenkins/oops.properties | 6 ++ war/src/main/webapp/WEB-INF/web.xml | 4 ++ war/src/main/webapp/images/rage.png | Bin 0 -> 27730 bytes 9 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 core/src/main/java/hudson/init/impl/InstallUncaughtExceptionHandler.java create mode 100644 core/src/main/resources/jenkins/model/Jenkins/oops.jelly create mode 100644 core/src/main/resources/jenkins/model/Jenkins/oops.properties create mode 100644 war/src/main/webapp/images/rage.png diff --git a/core/pom.xml b/core/pom.xml index 56865c521f..625044594e 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -42,7 +42,7 @@ THE SOFTWARE. true - 1.212 + 1.213 2.5.6.SEC03 diff --git a/core/src/main/java/hudson/WebAppMain.java b/core/src/main/java/hudson/WebAppMain.java index 15ba27cd4b..8475fe221c 100644 --- a/core/src/main/java/hudson/WebAppMain.java +++ b/core/src/main/java/hudson/WebAppMain.java @@ -206,7 +206,7 @@ public final class WebAppMain implements ServletContextListener { context.setAttribute(APP,new HudsonIsLoading()); - initThread = new Thread("hudson initialization thread") { + initThread = new Thread("Jenkins initialization thread") { @Override public void run() { boolean success = false; diff --git a/core/src/main/java/hudson/init/impl/InstallUncaughtExceptionHandler.java b/core/src/main/java/hudson/init/impl/InstallUncaughtExceptionHandler.java new file mode 100644 index 0000000000..60f34e3a7d --- /dev/null +++ b/core/src/main/java/hudson/init/impl/InstallUncaughtExceptionHandler.java @@ -0,0 +1,30 @@ +package hudson.init.impl; + +import hudson.init.Initializer; +import jenkins.model.Jenkins; +import org.kohsuke.stapler.WebApp; +import org.kohsuke.stapler.compression.CompressionFilter; +import org.kohsuke.stapler.compression.UncaughtExceptionHandler; + +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * @author Kohsuke Kawaguchi + */ +public class InstallUncaughtExceptionHandler { + @Initializer + public static void init(final Jenkins j) throws IOException { + CompressionFilter.setUncaughtExceptionHandler(j.servletContext, new UncaughtExceptionHandler() { + @Override + public void reportException(Throwable e, ServletContext context, HttpServletRequest req, HttpServletResponse rsp) throws ServletException, IOException { + req.setAttribute("javax.servlet.error.exception",e); + WebApp.get(j.servletContext).getSomeStapler() + .invoke(req,rsp, Jenkins.getInstance(), "/oops"); + } + }); + } +} diff --git a/core/src/main/java/hudson/util/PluginServletFilter.java b/core/src/main/java/hudson/util/PluginServletFilter.java index 0decb8f541..28d505a1b5 100644 --- a/core/src/main/java/hudson/util/PluginServletFilter.java +++ b/core/src/main/java/hudson/util/PluginServletFilter.java @@ -32,6 +32,7 @@ import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.List; import java.util.Vector; diff --git a/core/src/main/java/jenkins/model/Jenkins.java b/core/src/main/java/jenkins/model/Jenkins.java index de2a136ca4..dcd190a7e7 100755 --- a/core/src/main/java/jenkins/model/Jenkins.java +++ b/core/src/main/java/jenkins/model/Jenkins.java @@ -3630,6 +3630,7 @@ public class Jenkins extends AbstractCIBase implements ModifiableTopLevelItemGro || rest.startsWith("/logout") || rest.startsWith("/accessDenied") || rest.startsWith("/adjuncts/") + || rest.startsWith("/oops") || rest.startsWith("/signup") || rest.startsWith("/tcpSlaveAgentListener") // TODO SlaveComputer.doSlaveAgentJnlp; there should be an annotation to request unprotected access diff --git a/core/src/main/resources/jenkins/model/Jenkins/oops.jelly b/core/src/main/resources/jenkins/model/Jenkins/oops.jelly new file mode 100644 index 0000000000..2a7e0910d2 --- /dev/null +++ b/core/src/main/resources/jenkins/model/Jenkins/oops.jelly @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + +

+ ${%Oops!} +

+

+ ${%problemHappened} + ${%checkJIRA} + ${%vote} + ${%pleaseReport} + ${%stackTracePlease} + ${%checkML} +

+

${%Stack trace}

+
${h.printThrowable(request.getAttribute('javax.servlet.error.exception'))}
+
+
+
\ No newline at end of file diff --git a/core/src/main/resources/jenkins/model/Jenkins/oops.properties b/core/src/main/resources/jenkins/model/Jenkins/oops.properties new file mode 100644 index 0000000000..b67206fd10 --- /dev/null +++ b/core/src/main/resources/jenkins/model/Jenkins/oops.properties @@ -0,0 +1,6 @@ +problemHappened= A problem occurred while processing the request. +checkJIRA= Please check our bug tracker to see if a similar problem has already been reported. +vote= If it is already reported, please vote and put a comment on it to let us gauge the impact of the problem. +pleaseReport= If you think this is a new issue, please file a new issue. +stackTracePlease= When you file an issue, make sure to add the entire stack trace, along with the version of Jenkins and relevant plugins. +checkML= The users list might be also useful in understanding what has happened. diff --git a/war/src/main/webapp/WEB-INF/web.xml b/war/src/main/webapp/WEB-INF/web.xml index c371041d84..aa14977b41 100644 --- a/war/src/main/webapp/WEB-INF/web.xml +++ b/war/src/main/webapp/WEB-INF/web.xml @@ -207,4 +207,8 @@ THE SOFTWARE. video/webm + + java.lang.Throwable + /oops + diff --git a/war/src/main/webapp/images/rage.png b/war/src/main/webapp/images/rage.png new file mode 100644 index 0000000000000000000000000000000000000000..1d6b711ddc0d25e6dec4f79b4d9a3252514f3e71 GIT binary patch literal 27730 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