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();