You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2015/08/12 15:33:29 UTC

svn commit: r1695511 - in /sling/trunk/bundles/extensions/healthcheck/core/src: main/java/org/apache/sling/hc/core/impl/servlet/ test/java/org/apache/sling/hc/core/impl/servlet/

Author: bdelacretaz
Date: Wed Aug 12 13:33:29 2015
New Revision: 1695511

URL: http://svn.apache.org/r1695511
Log:
SLING-4862 - add list of supported URL parameters to HTML output, to make it self-explaining

Modified:
    sling/trunk/bundles/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/core/impl/servlet/HealthCheckExecutorServlet.java
    sling/trunk/bundles/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/core/impl/servlet/ResultHtmlSerializer.java
    sling/trunk/bundles/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/core/impl/servlet/HealthCheckExecutorServletTest.java

Modified: sling/trunk/bundles/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/core/impl/servlet/HealthCheckExecutorServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/core/impl/servlet/HealthCheckExecutorServlet.java?rev=1695511&r1=1695510&r2=1695511&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/core/impl/servlet/HealthCheckExecutorServlet.java (original)
+++ sling/trunk/bundles/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/core/impl/servlet/HealthCheckExecutorServlet.java Wed Aug 12 13:33:29 2015
@@ -29,12 +29,12 @@ import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
 import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Modified;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
@@ -71,15 +71,28 @@ public class HealthCheckExecutorServlet
 
     private static final Logger LOG = LoggerFactory.getLogger(HealthCheckExecutorServlet.class);
 
-    static final String PARAM_TAGS = "tags";
-    static final String PARAM_FORMAT = "format";
-    static final String PARAM_HTTP_STATUS = "httpStatus";
-
-    static final String PARAM_COMBINE_TAGS_WITH_OR = "combineTagsWithOr";
-    static final String PARAM_FORCE_INSTANT_EXECUTION = "forceInstantExecution";
-    static final String PARAM_OVERRIDE_GLOBAL_TIMEOUT = "timeout";
-
-    static final String PARAM_INCLUDE_DEBUG = "includeDebug";
+    static class Param {
+        final String name;
+        final String description;
+        Param(String n, String d) {
+            name = n;
+            description = d;
+        }
+    }
+    
+    static final Param PARAM_TAGS = new Param("tags", "Comma-separated list of health checks tags to select");
+    static final Param PARAM_FORMAT = new Param("format", "Output format, html or json - an extension in the URL overrides this");
+    static final Param PARAM_HTTP_STATUS = new Param("httpStatus", "Specify HTTP result code, for example CRITICAL:503,HEALTH_CHECK_ERROR:500 or CRITICAL+:503"
+            + " which means '503 for anything >= CRITICAL'");
+
+    static final Param PARAM_COMBINE_TAGS_WITH_OR = new Param("combineTagsWithOr", "Combine tags with OR, active by default. Set to false to combine with AND");
+    static final Param PARAM_FORCE_INSTANT_EXECUTION = new Param("forceInstantExecution", "Parameter for the HealthCheckExecutionOptions");
+    static final Param PARAM_OVERRIDE_GLOBAL_TIMEOUT = new Param("timeout", "Override th globale HealthCheckExecutionOptions timeout");
+
+    static final Param PARAM_INCLUDE_DEBUG = new Param("hcDebug", "Include the DEBUG output of the Health Checks");
+    
+    static final Param [] PARAM_LIST = { PARAM_TAGS, PARAM_FORMAT, PARAM_HTTP_STATUS, PARAM_COMBINE_TAGS_WITH_OR, 
+        PARAM_FORCE_INSTANT_EXECUTION, PARAM_OVERRIDE_GLOBAL_TIMEOUT, PARAM_INCLUDE_DEBUG};
 
     static final String FORMAT_HTML = "html";
     static final String FORMAT_JSON = "json";
@@ -139,22 +152,22 @@ public class HealthCheckExecutorServlet
     @Override
     protected void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {
 
-        final String[] tags = StringUtils.defaultIfEmpty(request.getParameter(PARAM_TAGS), "").split("[, ;]+");
+        final String[] tags = StringUtils.defaultIfEmpty(request.getParameter(PARAM_TAGS.name), "").split("[, ;]+");
 
         String format = StringUtils.substringAfterLast(request.getPathInfo(), ".");
         if (StringUtils.isBlank(format)) {
             // if not provided via extension use parameter or default
-            format = StringUtils.defaultIfEmpty(request.getParameter(PARAM_FORMAT), FORMAT_HTML);
+            format = StringUtils.defaultIfEmpty(request.getParameter(PARAM_FORMAT.name), FORMAT_HTML);
         }
 
-        final Boolean includeDebug = Boolean.valueOf(request.getParameter(PARAM_INCLUDE_DEBUG));
-        final Map<Result.Status, Integer> statusMapping = request.getParameter(PARAM_HTTP_STATUS) != null ? getStatusMapping(request
-                .getParameter(PARAM_HTTP_STATUS)) : null;
+        final Boolean includeDebug = Boolean.valueOf(request.getParameter(PARAM_INCLUDE_DEBUG.name));
+        final Map<Result.Status, Integer> statusMapping = request.getParameter(PARAM_HTTP_STATUS.name) != null ? getStatusMapping(request
+                .getParameter(PARAM_HTTP_STATUS.name)) : null;
 
         HealthCheckExecutionOptions options = new HealthCheckExecutionOptions();
-        options.setCombineTagsWithOr(Boolean.valueOf(StringUtils.defaultString(request.getParameter(PARAM_COMBINE_TAGS_WITH_OR), "true")));
-        options.setForceInstantExecution(Boolean.valueOf(request.getParameter(PARAM_FORCE_INSTANT_EXECUTION)));
-        String overrideGlobalTimeoutVal = request.getParameter(PARAM_OVERRIDE_GLOBAL_TIMEOUT);
+        options.setCombineTagsWithOr(Boolean.valueOf(StringUtils.defaultString(request.getParameter(PARAM_COMBINE_TAGS_WITH_OR.name), "true")));
+        options.setForceInstantExecution(Boolean.valueOf(request.getParameter(PARAM_FORCE_INSTANT_EXECUTION.name)));
+        String overrideGlobalTimeoutVal = request.getParameter(PARAM_OVERRIDE_GLOBAL_TIMEOUT.name);
         if (StringUtils.isNumeric(overrideGlobalTimeoutVal)) {
             options.setOverrideGlobalTimeout(Integer.valueOf(overrideGlobalTimeoutVal));
         }
@@ -208,20 +221,25 @@ public class HealthCheckExecutorServlet
     private void sendHtmlResponse(final Result overallResult, final List<HealthCheckExecutionResult> executionResults,
             final HttpServletRequest request, final HttpServletResponse response, boolean includeDebug)
             throws IOException {
-
-        String resultHtml = this.htmlSerializer.serialize(overallResult, executionResults, includeDebug);
-
         response.setContentType(CONTENT_TYPE_HTML);
         response.setHeader(STATUS_HEADER_NAME, overallResult.toString());
-
-        PrintWriter writer = response.getWriter();
-        writer.append(resultHtml);
-
+        response.getWriter().append(this.htmlSerializer.serialize(overallResult, executionResults, getHtmlHelpText(), includeDebug));
     }
 
     private void sendNoCacheHeaders(final HttpServletResponse response) {
         response.setHeader(CACHE_CONTROL_KEY, CACHE_CONTROL_VALUE);
     }
+    
+    private String getHtmlHelpText() {
+        final StringBuilder sb = new StringBuilder();
+        sb.append("<h3>Supported URL parameters</h3>\n");
+        for(Param p : PARAM_LIST) {
+            sb.append("<b>").append(p.name).append("</b>:");
+            sb.append(StringEscapeUtils.escapeHtml(p.description));
+            sb.append("<br/>");
+        }
+        return sb.toString();
+    }
 
     Map<Result.Status, Integer> getStatusMapping(String mappingStr) throws ServletException {
         Map<Result.Status, Integer> statusMapping = new HashMap<Result.Status, Integer>();

Modified: sling/trunk/bundles/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/core/impl/servlet/ResultHtmlSerializer.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/core/impl/servlet/ResultHtmlSerializer.java?rev=1695511&r1=1695510&r2=1695511&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/core/impl/servlet/ResultHtmlSerializer.java (original)
+++ sling/trunk/bundles/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/core/impl/servlet/ResultHtmlSerializer.java Wed Aug 12 13:33:29 2015
@@ -55,7 +55,8 @@ public class ResultHtmlSerializer {
             + ".statusOK { background-color:#CCFFCC;}\n"
             + ".statusWARN { background-color:#FFE569;}\n"
             + ".statusCRITICAL { background-color:#F0975A;}\n"
-            + ".statusHEALTH_CHECK_ERROR { background-color:#F16D4E;}\n";
+            + ".statusHEALTH_CHECK_ERROR { background-color:#F16D4E;}\n"
+            + ".helpText { color:grey; font-size:80%; }\n";
     public static final String PROPERTY_CSS_STYLE = "styleString";
     @Property(name = PROPERTY_CSS_STYLE, label = "CSS Style",
             description = "CSS Style - can be configured to change the look and feel of the html result page.", value = CSS_STYLE_DEFAULT)
@@ -67,7 +68,7 @@ public class ResultHtmlSerializer {
         this.styleString = PropertiesUtil.toString(properties.get(PROPERTY_CSS_STYLE), CSS_STYLE_DEFAULT);
     }
 
-    public String serialize(final Result overallResult, final List<HealthCheckExecutionResult> executionResults, boolean includeDebug) {
+    public String serialize(final Result overallResult, final List<HealthCheckExecutionResult> executionResults, String escapedHelpText, boolean includeDebug) {
 
         StringWriter stringWriter = new StringWriter();
         PrintWriter writer = new PrintWriter(stringWriter);
@@ -131,6 +132,10 @@ public class ResultHtmlSerializer {
             writer.println("</tr>");
         }
         writer.println("</table>");
+        
+        writer.println("<div class='helpText'>");
+        writer.println(escapedHelpText);
+        writer.println("</div>");
         writer.println("</body></html>");
 
         return stringWriter.toString();

Modified: sling/trunk/bundles/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/core/impl/servlet/HealthCheckExecutorServletTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/core/impl/servlet/HealthCheckExecutorServletTest.java?rev=1695511&r1=1695510&r2=1695511&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/core/impl/servlet/HealthCheckExecutorServletTest.java (original)
+++ sling/trunk/bundles/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/core/impl/servlet/HealthCheckExecutorServletTest.java Wed Aug 12 13:33:29 2015
@@ -21,6 +21,7 @@ import static org.junit.Assert.assertEqu
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.argThat;
 import static org.mockito.Matchers.eq;
+import static org.mockito.Matchers.contains;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyZeroInteractions;
@@ -94,8 +95,8 @@ public class HealthCheckExecutorServletT
     public void testDoGetHtml() throws ServletException, IOException {
 
         String testTag = "testTag";
-        doReturn(testTag).when(request).getParameter(HealthCheckExecutorServlet.PARAM_TAGS);
-        doReturn("false").when(request).getParameter(HealthCheckExecutorServlet.PARAM_COMBINE_TAGS_WITH_OR);
+        doReturn(testTag).when(request).getParameter(HealthCheckExecutorServlet.PARAM_TAGS.name);
+        doReturn("false").when(request).getParameter(HealthCheckExecutorServlet.PARAM_COMBINE_TAGS_WITH_OR.name);
         List<HealthCheckExecutionResult> executionResults = getExecutionResults(Result.Status.CRITICAL);
         doReturn(executionResults).when(healthCheckExecutor).execute(new HealthCheckExecutionOptions(), testTag);
         
@@ -103,17 +104,17 @@ public class HealthCheckExecutorServletT
 
         verifyZeroInteractions(jsonSerializer);
         verify(htmlSerializer)
-                .serialize(resultEquals(new Result(Result.Status.CRITICAL, "Overall Status CRITICAL")), eq(executionResults), eq(false));
+                .serialize(resultEquals(new Result(Result.Status.CRITICAL, "Overall Status CRITICAL")), eq(executionResults), contains("Supported URL parameters"), eq(false));
     }
 
     @Test
     public void testDoGetJson() throws ServletException, IOException {
 
         String testTag = "testTag";
-        doReturn(testTag).when(request).getParameter(HealthCheckExecutorServlet.PARAM_TAGS);
-        doReturn("true").when(request).getParameter(HealthCheckExecutorServlet.PARAM_COMBINE_TAGS_WITH_OR);
+        doReturn(testTag).when(request).getParameter(HealthCheckExecutorServlet.PARAM_TAGS.name);
+        doReturn("true").when(request).getParameter(HealthCheckExecutorServlet.PARAM_COMBINE_TAGS_WITH_OR.name);
         int timeout = 5000;
-        doReturn(timeout + "").when(request).getParameter(HealthCheckExecutorServlet.PARAM_OVERRIDE_GLOBAL_TIMEOUT);
+        doReturn(timeout + "").when(request).getParameter(HealthCheckExecutorServlet.PARAM_OVERRIDE_GLOBAL_TIMEOUT.name);
         doReturn("/result.json").when(request).getPathInfo();
         List<HealthCheckExecutionResult> executionResults = getExecutionResults(Result.Status.WARN);
         HealthCheckExecutionOptions options = new HealthCheckExecutionOptions();