[or-cvs] [metrics-web/master 2/2] Add error page containing a sitemap.

karsten at torproject.org karsten at torproject.org
Tue Oct 19 10:31:52 UTC 2010


Author: Karsten Loesing <karsten.loesing at gmx.net>
Date: Tue, 19 Oct 2010 12:31:30 +0200
Subject: Add error page containing a sitemap.
Commit: 51ce1dac12bfac7c432342d61163b3c7994c01fb

---
 etc/web.xml                                        |   18 +++++
 src/org/torproject/ernie/web/ConsensusServlet.java |   12 ++--
 .../torproject/ernie/web/DescriptorServlet.java    |    1 -
 .../ernie/web/ErnieGeneratedFileServlet.java       |    2 +-
 .../ernie/web/ExtraInfoDescriptorServlet.java      |   10 ++--
 src/org/torproject/ernie/web/RelayServlet.java     |    1 -
 .../ernie/web/ServerDescriptorServlet.java         |   10 ++--
 web/WEB-INF/error.jsp                              |   75 ++++++++++++++++++++
 8 files changed, 110 insertions(+), 19 deletions(-)
 create mode 100644 web/WEB-INF/error.jsp

diff --git a/etc/web.xml b/etc/web.xml
index c1b57fa..02f682e 100644
--- a/etc/web.xml
+++ b/etc/web.xml
@@ -323,5 +323,23 @@
   <welcome-file-list>
     <welcome-file>index.html</welcome-file>
   </welcome-file-list>
+
+  <error-page>
+    <error-code>400</error-code>
+    <location>/WEB-INF/error.jsp</location>
+  </error-page>
+  <error-page>
+    <error-code>404</error-code>
+    <location>/WEB-INF/error.jsp</location>
+  </error-page>
+  <error-page>
+    <error-code>500</error-code>
+    <location>/WEB-INF/error.jsp</location>
+  </error-page>
+  <error-page>
+    <exception-type>java.lang.Throwable</exception-type>
+    <location>/WEB-INF/error.jsp</location>
+  </error-page>
+
 </web-app>
 
diff --git a/src/org/torproject/ernie/web/ConsensusServlet.java b/src/org/torproject/ernie/web/ConsensusServlet.java
index 7be0600..97577c8 100644
--- a/src/org/torproject/ernie/web/ConsensusServlet.java
+++ b/src/org/torproject/ernie/web/ConsensusServlet.java
@@ -21,14 +21,14 @@ public class ConsensusServlet extends HttpServlet {
         + "directory-archive/consensus");
     if (!archiveDirectory.exists() || !archiveDirectory.isDirectory()) {
       /* Oops, we don't have any descriptors to serve. */
-      response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+      response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
       return;
     }
 
     /* Check valid-after parameter. */
     if (validAfterParameter == null ||
-        validAfterParameter.length() < "yyyy-MM-dd-HH-mm-ss".length()) {
-      response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+        validAfterParameter.length() != "yyyy-MM-dd-HH-mm-ss".length()) {
+      response.sendError(HttpServletResponse.SC_BAD_REQUEST);
       return;
     }
     SimpleDateFormat timeFormat = new SimpleDateFormat(
@@ -38,11 +38,11 @@ public class ConsensusServlet extends HttpServlet {
     try {
       parsedTimestamp = timeFormat.parse(validAfterParameter);
     } catch (ParseException e) {
-      response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+      response.sendError(HttpServletResponse.SC_BAD_REQUEST);
       return;
     }
     if (parsedTimestamp == null) {
-      response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+      response.sendError(HttpServletResponse.SC_BAD_REQUEST);
       return;
     }
     String consensusFilename = archiveDirectory.getAbsolutePath()
@@ -53,7 +53,7 @@ public class ConsensusServlet extends HttpServlet {
     File consensusFile = new File(consensusFilename);
 
     if (!consensusFile.exists()) {
-      response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+      response.sendError(HttpServletResponse.SC_NOT_FOUND);
       return;
     }
 
diff --git a/src/org/torproject/ernie/web/DescriptorServlet.java b/src/org/torproject/ernie/web/DescriptorServlet.java
index fb2443b..b389253 100644
--- a/src/org/torproject/ernie/web/DescriptorServlet.java
+++ b/src/org/torproject/ernie/web/DescriptorServlet.java
@@ -75,7 +75,6 @@ public class DescriptorServlet extends HttpServlet {
         + "              <a class=\"current\">Relay Search</a>\n"
         + "              <a href=\"consensus-health.html\">Consensus "
           + "Health</a>\n"
-        + "              <a href=\"log.html\">Last Log</a>\n"
         + "            </font>\n"
         + "          </td>\n"
         + "          <td class=\"banner-right\"></td>\n"
diff --git a/src/org/torproject/ernie/web/ErnieGeneratedFileServlet.java b/src/org/torproject/ernie/web/ErnieGeneratedFileServlet.java
index 747b16d..f4bd066 100644
--- a/src/org/torproject/ernie/web/ErnieGeneratedFileServlet.java
+++ b/src/org/torproject/ernie/web/ErnieGeneratedFileServlet.java
@@ -25,7 +25,7 @@ public class ErnieGeneratedFileServlet extends HttpServlet {
     try {
       File f = new File(fn);
       if (!f.exists()) {
-        response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+        response.sendError(HttpServletResponse.SC_NOT_FOUND);
         return;
       }
       response.setContentType(this.getServletContext().getMimeType(f.getName()));
diff --git a/src/org/torproject/ernie/web/ExtraInfoDescriptorServlet.java b/src/org/torproject/ernie/web/ExtraInfoDescriptorServlet.java
index aee9be0..3179144 100644
--- a/src/org/torproject/ernie/web/ExtraInfoDescriptorServlet.java
+++ b/src/org/torproject/ernie/web/ExtraInfoDescriptorServlet.java
@@ -39,21 +39,21 @@ public class ExtraInfoDescriptorServlet extends HttpServlet {
 
     /* Check if we have a database connection. */
     if (conn == null) {
-      //response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+      //response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
       return;
     }
 
     /* Check desc-id parameter. */
     String descIdParameter = request.getParameter("desc-id");
     if (descIdParameter == null || descIdParameter.length() < 8) {
-      response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+      response.sendError(HttpServletResponse.SC_BAD_REQUEST);
       return;
     }
     String descId = descIdParameter.toLowerCase();
     Pattern descIdPattern = Pattern.compile("^[0-9a-f]+$");
     Matcher descIdMatcher = descIdPattern.matcher(descId);
     if (!descIdMatcher.matches()) {
-      response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+      response.sendError(HttpServletResponse.SC_BAD_REQUEST);
       return;
     }
 
@@ -70,13 +70,13 @@ public class ExtraInfoDescriptorServlet extends HttpServlet {
         rawDescriptor = rs.getBytes(2);
       }
     } catch (SQLException e) {
-      response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+      response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
       return;
     }
 
     /* Write response. */
     if (rawDescriptor == null) {
-      response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+      response.sendError(HttpServletResponse.SC_NOT_FOUND);
       return;
     }
     try {
diff --git a/src/org/torproject/ernie/web/RelayServlet.java b/src/org/torproject/ernie/web/RelayServlet.java
index f6af3d9..052a126 100644
--- a/src/org/torproject/ernie/web/RelayServlet.java
+++ b/src/org/torproject/ernie/web/RelayServlet.java
@@ -82,7 +82,6 @@ public class RelayServlet extends HttpServlet {
         + "              <a class=\"current\">Relay Search</a>\n"
         + "              <a href=\"consensus-health.html\">Consensus "
           + "Health</a>\n"
-        + "              <a href=\"log.html\">Last Log</a>\n"
         + "            </font>\n"
         + "          </td>\n"
         + "          <td class=\"banner-right\"></td>\n"
diff --git a/src/org/torproject/ernie/web/ServerDescriptorServlet.java b/src/org/torproject/ernie/web/ServerDescriptorServlet.java
index 23e4625..1a9cc1f 100644
--- a/src/org/torproject/ernie/web/ServerDescriptorServlet.java
+++ b/src/org/torproject/ernie/web/ServerDescriptorServlet.java
@@ -39,7 +39,7 @@ public class ServerDescriptorServlet extends HttpServlet {
 
     /* Check if we have a database connection. */
     if (conn == null) {
-      response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+      response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
       return;
     }
 
@@ -47,14 +47,14 @@ public class ServerDescriptorServlet extends HttpServlet {
     String descIdParameter = request.getParameter("desc-id");
     if (descIdParameter == null || descIdParameter.length() < 8 ||
         descIdParameter.length() > 40) {
-      response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+      response.sendError(HttpServletResponse.SC_BAD_REQUEST);
       return;
     }
     String descId = descIdParameter.toLowerCase();
     Pattern descIdPattern = Pattern.compile("^[0-9a-f]+$");
     Matcher descIdMatcher = descIdPattern.matcher(descId);
     if (!descIdMatcher.matches()) {
-      response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+      response.sendError(HttpServletResponse.SC_BAD_REQUEST);
       return;
     }
 
@@ -71,13 +71,13 @@ public class ServerDescriptorServlet extends HttpServlet {
         rawDescriptor = rs.getBytes(2);
       }
     } catch (SQLException e) {
-      response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+      response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
       return;
     }
 
     /* Write response. */
     if (rawDescriptor == null) {
-      response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+      response.sendError(HttpServletResponse.SC_NOT_FOUND);
       return;
     }
     try {
diff --git a/web/WEB-INF/error.jsp b/web/WEB-INF/error.jsp
new file mode 100644
index 0000000..3c713a3
--- /dev/null
+++ b/web/WEB-INF/error.jsp
@@ -0,0 +1,75 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ page isErrorPage="true" %>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+  <title>Tor Metrics Portal: Error</title>
+  <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
+  <link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
+  <link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
+</head>
+<body>
+  <div class="center">
+    <%@ include file="banner.jsp"%>
+    <div class="main-column">
+<h2>Tor Metrics Portal: Error</h2>
+<br>
+<p>
+Oops! Something went wrong here! We encountered a
+<b>
+<c:choose>
+<c:when test="${pageContext.errorData.statusCode eq 400}">
+400 Bad Request
+</c:when>
+<c:when test="${pageContext.errorData.statusCode eq 404}">
+404 Not Found
+</c:when>
+<c:when test="${pageContext.errorData.statusCode eq 500}">
+500 Internal Server Error
+</c:when>
+<c:when test="${not empty pageContext.errorData.throwable}">
+${pageContext.exception}
+</c:when>
+<c:otherwise>
+Unknown Error
+</c:otherwise>
+</c:choose>
+</b>
+when processing your request!</p>
+
+<p>
+Maybe you find what you're looking for on our sitemap:
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="graphs.html">Graphs</a>
+<ul>
+<li><a href="network.html">Network</a></li>
+<li><a href="users.html">Users</a></li>
+<li><a href="packages.html">Packages</a></li>
+<li><a href="performance.html">Performance</a></li>
+</ul></li>
+<li><a href="research.html">Research</a>
+<ul>
+<li><a href="papers.html">Papers</a></li>
+<li><a href="data.html">Data</a></li>
+<li><a href="tools.html">Tools</a></li>
+</ul></li>
+<li><a href="status.html">Status</a>
+<ul>
+<li><a href="exonerator.html">ExoneraTor</a></li>
+<li><a href="relay-search.html">Relay Search</a></li>
+<li><a href="consensus-health.html">Consensus Health</a></li>
+</ul></li>
+</ul>
+</p>
+
+<p>If this problem persists, please
+<a href="mailto:tor-assistants at freehaven.net">let us know</a>!</p>
+
+    </div>
+  </div>
+  <div class="bottom" id="bottom">
+    <%@ include file="footer.jsp"%>
+  </div>
+</body>
+</html>
-- 
1.7.1



More information about the tor-commits mailing list