This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.hc.webconsole-1.0.4 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-hc-webconsole.git
commit d086e36f18bc52d63f807b5e13df960c345f00cb Author: Carsten Ziegeler <[email protected]> AuthorDate: Mon Aug 19 06:21:19 2013 +0000 SLING-3021 : Use service properties for HC meta data and improve JMX registration git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/healthcheck/webconsole@1515281 13f79535-47bb-0310-9956-ffa450edef68 --- .../impl/HealthCheckWebconsolePlugin.java | 109 ++++++++++++--------- 1 file changed, 61 insertions(+), 48 deletions(-) diff --git a/src/main/java/org/apache/sling/hc/webconsole/impl/HealthCheckWebconsolePlugin.java b/src/main/java/org/apache/sling/hc/webconsole/impl/HealthCheckWebconsolePlugin.java index 3a11943..9216c23 100644 --- a/src/main/java/org/apache/sling/hc/webconsole/impl/HealthCheckWebconsolePlugin.java +++ b/src/main/java/org/apache/sling/hc/webconsole/impl/HealthCheckWebconsolePlugin.java @@ -20,7 +20,7 @@ package org.apache.sling.hc.webconsole.impl; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; -import java.util.List; +import java.util.Arrays; import javax.servlet.Servlet; import javax.servlet.ServletException; @@ -34,15 +34,15 @@ import org.apache.felix.scr.annotations.Properties; import org.apache.felix.scr.annotations.Property; import org.apache.felix.scr.annotations.Service; import org.apache.sling.api.request.ResponseUtil; -import org.apache.sling.hc.api.Constants; import org.apache.sling.hc.api.HealthCheck; import org.apache.sling.hc.api.Result; import org.apache.sling.hc.api.ResultLog; import org.apache.sling.hc.util.HealthCheckFilter; import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; import org.osgi.service.component.ComponentContext; -/** Webconsole plugin to execute health check services */ +/** Webconsole plugin to execute health check services */ @Component(immediate=true) @Service(Servlet.class) @SuppressWarnings("serial") @@ -62,14 +62,14 @@ public class HealthCheckWebconsolePlugin extends HttpServlet { public static final String PARAM_TAGS = "tags"; public static final String PARAM_DEBUG = "debug"; public static final String PARAM_QUIET = "quiet"; - + private BundleContext bundleContext; @Activate protected void activate(ComponentContext ctx) { bundleContext = ctx.getBundleContext(); } - + /** Serve static resource if applicable, and return true in that case */ private boolean getStaticResource(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { final String pathInfo = req.getPathInfo(); @@ -82,41 +82,45 @@ public class HealthCheckWebconsolePlugin extends HttpServlet { final byte [] buffer = new byte[16384]; int n=0; while( (n = is.read(buffer, 0, buffer.length)) > 0) { - resp.getOutputStream().write(buffer, 0, n); + resp.getOutputStream().write(buffer, 0, n); } resp.getOutputStream().flush(); return true; } return false; } - + @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { if(getStaticResource(req, resp)) { return; } - + final String tags = getParam(req, PARAM_TAGS, ""); final boolean debug = Boolean.valueOf(getParam(req, PARAM_DEBUG, "false")); final boolean quiet = Boolean.valueOf(getParam(req, PARAM_QUIET, "false")); - + doForm(req, resp, tags, debug, quiet); - + // Execute health checks only if tags are specified (even if empty) if(req.getParameter(PARAM_TAGS) != null) { - final List<HealthCheck> checks = new HealthCheckFilter(bundleContext).getTaggedHealthCheck(tags.split(",")); + final ServiceReference[] references = new HealthCheckFilter(bundleContext).getTaggedHealthCheckServiceReferences(tags.split(",")); + final PrintWriter pw = resp.getWriter(); pw.println("<table class='content healthcheck' cellpadding='0' cellspacing='0' width='100%'>"); int total = 0; int failed = 0; - for(HealthCheck hc : checks) { - final Result r = hc.execute(); - total++; - if(!r.isOk()) { - failed++; - } - if(!quiet || !r.isOk()) { - renderResult(resp, hc, r, debug); + for(final ServiceReference ref : references) { + final HealthCheck hc = (HealthCheck) this.bundleContext.getService(ref); + if ( hc != null ) { + final Result r = hc.execute(); + total++; + if (!r.isOk()) { + failed++; + } + if (!quiet || !r.isOk()) { + renderResult(resp, ref, hc, r, debug); + } } } final WebConsoleHelper c = new WebConsoleHelper(resp.getWriter()); @@ -124,14 +128,23 @@ public class HealthCheckWebconsolePlugin extends HttpServlet { pw.println("</table>"); } } - - private void renderResult(HttpServletResponse resp, HealthCheck hc, Result result, boolean debug) throws IOException { + + private void renderResult(HttpServletResponse resp, final ServiceReference ref, HealthCheck hc, Result result, boolean debug) throws IOException { final WebConsoleHelper c = new WebConsoleHelper(resp.getWriter()); final StringBuilder status = new StringBuilder(); - status.append("Tags: ").append(hc.getInfo().get(Constants.HC_TAGS)); - c.titleHtml(getDescription(hc), null); - + final Object tags = ref.getProperty(HealthCheck.TAGS); + final String tagString; + if ( tags == null ) { + tagString = ""; + } else if ( tags instanceof String[] ) { + tagString = Arrays.toString((String[])tags); + } else { + tagString = tags.toString(); + } + status.append("Tags: ").append(tagString); + c.titleHtml(getName(ref, hc), null); + c.tr(); c.tdContent(); c.writer().print(ResponseUtil.escapeXml(status.toString())); @@ -142,7 +155,7 @@ public class HealthCheckWebconsolePlugin extends HttpServlet { c.writer().print("</span>"); c.closeTd(); c.closeTr(); - + c.tr(); c.tdContent(); for(ResultLog.Entry e : result) { @@ -159,16 +172,16 @@ public class HealthCheckWebconsolePlugin extends HttpServlet { } c.closeTd(); } - - private String getDescription(HealthCheck hc) { - String result = hc.getInfo().get(Constants.HC_NAME); - if(result == null) { - result = hc.toString(); + + private String getName(final ServiceReference ref, HealthCheck hc) { + Object result = ref.getProperty(HealthCheck.NAME); + if (result == null) { + result = hc; } - return result; + return result.toString(); } - - private void doForm(HttpServletRequest req, HttpServletResponse resp, String tags, boolean debug, boolean quiet) + + private void doForm(HttpServletRequest req, HttpServletResponse resp, String tags, boolean debug, boolean quiet) throws IOException { final PrintWriter pw = resp.getWriter(); final WebConsoleHelper c = new WebConsoleHelper(pw); @@ -177,36 +190,36 @@ public class HealthCheckWebconsolePlugin extends HttpServlet { c.titleHtml(TITLE, "To execute health check services, enter " + " an optional list of tags, to select specific health checks, or no tags for all checks." + " Prefix a tag with a minus sign (-) to omit checks having that tag."); - - c.tr(); + + c.tr(); c.tdLabel("Health Check tags (comma-separated)"); c.tdContent(); pw.println("<input type='text' name='" + PARAM_TAGS + "' value='" + tags + "' class='input' size='80'>"); - c.closeTd(); + c.closeTd(); c.closeTr(); - - c.tr(); + + c.tr(); c.tdLabel("Show DEBUG logs"); c.tdContent(); - pw.println("<input type='checkbox' name='" + PARAM_DEBUG + "' class='input' value='true'" + pw.println("<input type='checkbox' name='" + PARAM_DEBUG + "' class='input' value='true'" + (debug ? " checked=true " : "") + ">"); - c.closeTd(); + c.closeTd(); c.closeTr(); - - c.tr(); + + c.tr(); c.tdLabel("Show failed checks only"); c.tdContent(); - pw.println("<input type='checkbox' name='" + PARAM_QUIET + "' class='input' value='true'" + pw.println("<input type='checkbox' name='" + PARAM_QUIET + "' class='input' value='true'" + (quiet ? " checked=true " : "") + ">"); - c.closeTd(); + c.closeTd(); c.closeTr(); - - c.tr(); + + c.tr(); c.tdContent(); pw.println("<input type='submit' value='Execute selected health checks'/>"); - c.closeTd(); + c.closeTd(); c.closeTr(); - + pw.println("</table></form>"); } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
