commit 69993b96a1aeb49a9095de67df5ccc561a7e4e90 Author: Karsten Loesing karsten.loesing@gmx.net Date: Tue Apr 9 09:39:56 2013 +0200
Implement maintenance mode.
When set, respond to all requests with 503 Service Unavailable. --- etc/web.xml.template | 4 +++ src/org/torproject/onionoo/ResourceServlet.java | 25 ++++++++++++++++++---- 2 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/etc/web.xml.template b/etc/web.xml.template index b7fbf9e..25314aa 100644 --- a/etc/web.xml.template +++ b/etc/web.xml.template @@ -15,6 +15,10 @@ <param-name>outDir</param-name> <param-value>/srv/onionoo/out/</param-value> </init-param> + <init-param> + <param-name>maintenance</param-name> + <param-value>0</param-value> + </init-param> </servlet> <servlet-mapping> <servlet-name>Resource</servlet-name> diff --git a/src/org/torproject/onionoo/ResourceServlet.java b/src/org/torproject/onionoo/ResourceServlet.java index 19dc752..8c88781 100644 --- a/src/org/torproject/onionoo/ResourceServlet.java +++ b/src/org/torproject/onionoo/ResourceServlet.java @@ -31,15 +31,21 @@ public class ResourceServlet extends HttpServlet {
private static final long serialVersionUID = 7236658979947465319L;
+ private boolean maintenanceMode = false; + private File summaryFile;
private String outDirString;
public void init(ServletConfig config) throws ServletException { super.init(config); - this.outDirString = config.getInitParameter("outDir"); - this.summaryFile = new File(outDirString, "summary"); - this.readSummaryFile(); + this.maintenanceMode = config.getInitParameter("maintenance") != null + && config.getInitParameter("maintenance").equals("1"); + if (!this.maintenanceMode) { + this.outDirString = config.getInitParameter("outDir"); + this.summaryFile = new File(outDirString, "summary"); + this.readSummaryFile(); + } }
long summaryFileLastModified = -1L; @@ -168,13 +174,22 @@ public class ResourceServlet extends HttpServlet { }
public long getLastModified(HttpServletRequest request) { - this.readSummaryFile(); - return this.summaryFileLastModified; + if (this.maintenanceMode) { + return super.getLastModified(request); + } else { + this.readSummaryFile(); + return this.summaryFileLastModified; + } }
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
+ if (this.maintenanceMode) { + response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE); + return; + } + this.readSummaryFile(); if (!this.readSummaryFile) { response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);