Author: bdelacretaz
Date: Tue Aug  6 07:38:46 2013
New Revision: 1510874

URL: http://svn.apache.org/r1510874
Log:
SLING-2987 - improved webconsole plugin

Modified:
    
sling/branches/SLING-2987-healthcheck-redesign/hc-core/src/main/java/org/apache/sling/hc/impl/HealthCheckWebconsolePlugin.java
    
sling/branches/SLING-2987-healthcheck-redesign/hc-core/src/main/java/org/apache/sling/hc/impl/JmxAttributeHealthCheck.java
    
sling/branches/SLING-2987-healthcheck-redesign/hc-core/src/main/java/org/apache/sling/hc/impl/ScriptableHealthCheck.java
    
sling/branches/SLING-2987-healthcheck-redesign/hc-core/src/main/resources/res/ui/healthcheck.css

Modified: 
sling/branches/SLING-2987-healthcheck-redesign/hc-core/src/main/java/org/apache/sling/hc/impl/HealthCheckWebconsolePlugin.java
URL: 
http://svn.apache.org/viewvc/sling/branches/SLING-2987-healthcheck-redesign/hc-core/src/main/java/org/apache/sling/hc/impl/HealthCheckWebconsolePlugin.java?rev=1510874&r1=1510873&r2=1510874&view=diff
==============================================================================
--- 
sling/branches/SLING-2987-healthcheck-redesign/hc-core/src/main/java/org/apache/sling/hc/impl/HealthCheckWebconsolePlugin.java
 (original)
+++ 
sling/branches/SLING-2987-healthcheck-redesign/hc-core/src/main/java/org/apache/sling/hc/impl/HealthCheckWebconsolePlugin.java
 Tue Aug  6 07:38:46 2013
@@ -34,11 +34,11 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Reference;
 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.HealthCheckSelector;
 import org.apache.sling.hc.api.Result;
 import org.apache.sling.hc.api.ResultLog;
-import org.osgi.framework.Constants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -47,8 +47,8 @@ import org.slf4j.LoggerFactory;
 @Service(Servlet.class)
 @SuppressWarnings("serial")
 @Properties({
-    @Property(name=Constants.SERVICE_DESCRIPTION, value="Sling Health Check 
Web Console Plugin"),
-    @Property(name=Constants.SERVICE_VENDOR, value="The Apache Software 
Foundation"),
+    @Property(name=org.osgi.framework.Constants.SERVICE_DESCRIPTION, 
value="Sling Health Check Web Console Plugin"),
+    @Property(name=org.osgi.framework.Constants.SERVICE_VENDOR, value="The 
Apache Software Foundation"),
     @Property(name="felix.webconsole.label", 
value=HealthCheckWebconsolePlugin.LABEL),
     @Property(name="felix.webconsole.title", 
value=HealthCheckWebconsolePlugin.TITLE),
     @Property(name="felix.webconsole.category", 
value=HealthCheckWebconsolePlugin.CATEGORY),
@@ -62,6 +62,8 @@ public class HealthCheckWebconsolePlugin
     public static final String LABEL = "healthcheck";
     public static final String CATEGORY = "Sling";
     public static final String PARAM_TAGS = "tags";
+    public static final String PARAM_DEBUG = "debug";
+    public static final String PARAM_QUIET = "quiet";
     
     @Reference
     private HealthCheckSelector selector;
@@ -86,31 +88,48 @@ public class HealthCheckWebconsolePlugin
         }
         
         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);
+        doForm(req, resp, tags, debug, quiet);
         
         final List<HealthCheck> checks = 
selector.getTaggedHealthCheck(tags.split(","));
         final PrintWriter pw = resp.getWriter();
         pw.println("<table class='content healthcheck' cellpadding='0' 
cellspacing='0' width='100%'>");
         for(HealthCheck hc : checks) {
             final ResultLog rl = new ResultLog(log);
-            renderResult(resp, hc.execute(rl));
+            final Result r = hc.execute(rl);
+            if(!quiet || !r.isOk()) {
+                renderResult(resp, r, debug);
+            }
         }
         pw.println("</table>");
     }
     
-    private void renderResult(HttpServletResponse resp, Result result) throws 
IOException {
+    private void renderResult(HttpServletResponse resp, Result result, boolean 
debug) throws IOException {
         final WebConsoleHelper c = new WebConsoleHelper(resp.getWriter());
 
+        final StringBuilder status = new StringBuilder();
+        status.append("Tags: 
").append(result.getHealthCheck().getInfo().get(Constants.HC_TAGS));
+        c.titleHtml(getDescription(result.getHealthCheck()), null);
+        
         c.tr();
-        c.tdLabel(ResponseUtil.escapeXml(result.getHealthCheck().toString()));
+        c.tdContent();
+        c.writer().print(ResponseUtil.escapeXml(status.toString()));
+        c.writer().print("<br/>Result: <span class='resultOk");
+        c.writer().print(result.isOk());
+        c.writer().print("'>");
+        c.writer().print(result.isOk() ? "Ok" : "NOT OK");
+        c.writer().print("</span>");
         c.closeTd();
+        c.closeTr();
         
-        // TODO tags and info
-        // dataRow(c, "Tags", 
ResponseUtil.escapeXml(r.getRule().getTags().toString()));
-            
+        c.tr();
         c.tdContent();
         for(ResultLog.Entry e : result.getLogEntries()) {
+            if(!debug && e.getLevel().ordinal() <= 
ResultLog.Level.DEBUG.ordinal()) {
+                continue;
+            }
             final StringBuilder sb = new StringBuilder();
             sb.append("<div 
class='log").append(e.getLevel().toString()).append("'>");
             sb.append(e.getLevel().toString())
@@ -122,22 +141,52 @@ public class HealthCheckWebconsolePlugin
         c.closeTd();
     }
     
-    private void doForm(HttpServletRequest req, HttpServletResponse resp, 
String tags) throws IOException {
+    private String getDescription(HealthCheck hc) {
+        String result = hc.getInfo().get(Constants.HC_NAME);
+        if(result == null) {
+            result = hc.toString();
+        }
+        final String description = hc.getInfo().get(Constants.HC_DESCRIPTION);
+        if(description != null) {
+            result += ": " + description;
+        }
+        return result;
+    }
+    
+    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);
         pw.print("<form method='get'>");
         pw.println("<table class='content' cellpadding='0' cellspacing='0' 
width='100%'>");
         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.");
+                + " 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.tdLabel("Rule tags (comma-separated)");
+        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.closeTr();
         
         c.tr(); 
+        c.tdLabel("Show DEBUG logs");
+        c.tdContent();
+        pw.println("<input type='checkbox' name='" + PARAM_DEBUG + "' 
class='input' value='true'" 
+                + (debug ? " checked=true " : "") + ">");
+        c.closeTd(); 
+        c.closeTr();
+        
+        c.tr(); 
+        c.tdLabel("Show failed checks only");
+        c.tdContent();
+        pw.println("<input type='checkbox' name='" + PARAM_QUIET + "' 
class='input' value='true'" 
+                + (quiet ? " checked=true " : "") + ">");
+        c.closeTd(); 
+        c.closeTr();
+        
+        c.tr(); 
         c.tdContent();
         pw.println("<input type='submit' value='Execute selected health 
checks'/>");
         c.closeTd(); 

Modified: 
sling/branches/SLING-2987-healthcheck-redesign/hc-core/src/main/java/org/apache/sling/hc/impl/JmxAttributeHealthCheck.java
URL: 
http://svn.apache.org/viewvc/sling/branches/SLING-2987-healthcheck-redesign/hc-core/src/main/java/org/apache/sling/hc/impl/JmxAttributeHealthCheck.java?rev=1510874&r1=1510873&r2=1510874&view=diff
==============================================================================
--- 
sling/branches/SLING-2987-healthcheck-redesign/hc-core/src/main/java/org/apache/sling/hc/impl/JmxAttributeHealthCheck.java
 (original)
+++ 
sling/branches/SLING-2987-healthcheck-redesign/hc-core/src/main/java/org/apache/sling/hc/impl/JmxAttributeHealthCheck.java
 Tue Aug  6 07:38:46 2013
@@ -18,6 +18,7 @@
 package org.apache.sling.hc.impl;
 
 import java.lang.management.ManagementFactory;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -75,6 +76,8 @@ public class JmxAttributeHealthCheck imp
         info.put(PROP_ATTRIBUTE_NAME, attributeName);
         info.put(PROP_CONSTRAINT, constraint);
         info.put(Constants.HC_NAME, 
PropertiesUtil.toString(ctx.getProperties().get(Constants.HC_NAME), ""));
+        info.put(Constants.HC_TAGS, 
+                
Arrays.asList(PropertiesUtil.toStringArray(ctx.getProperties().get(Constants.HC_TAGS),
 new String[] {})).toString());
         
         log.info("Activated with HealthCheck name={}, objectName={}, 
attribute={}, constraint={}", 
                 new Object[] { info.get(Constants.HC_NAME), mbeanName, 
attributeName, constraint });

Modified: 
sling/branches/SLING-2987-healthcheck-redesign/hc-core/src/main/java/org/apache/sling/hc/impl/ScriptableHealthCheck.java
URL: 
http://svn.apache.org/viewvc/sling/branches/SLING-2987-healthcheck-redesign/hc-core/src/main/java/org/apache/sling/hc/impl/ScriptableHealthCheck.java?rev=1510874&r1=1510873&r2=1510874&view=diff
==============================================================================
--- 
sling/branches/SLING-2987-healthcheck-redesign/hc-core/src/main/java/org/apache/sling/hc/impl/ScriptableHealthCheck.java
 (original)
+++ 
sling/branches/SLING-2987-healthcheck-redesign/hc-core/src/main/java/org/apache/sling/hc/impl/ScriptableHealthCheck.java
 Tue Aug  6 07:38:46 2013
@@ -17,6 +17,7 @@
  */
 package org.apache.sling.hc.impl;
 
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -77,6 +78,8 @@ public class ScriptableHealthCheck imple
         info.put(PROP_EXPRESSION, expression);
         info.put(PROP_LANGUAGE_EXTENSION, languageExtension);
         info.put(Constants.HC_NAME, 
PropertiesUtil.toString(ctx.getProperties().get(Constants.HC_NAME), ""));
+        info.put(Constants.HC_TAGS, 
+                
Arrays.asList(PropertiesUtil.toStringArray(ctx.getProperties().get(Constants.HC_TAGS),
 new String[] {})).toString());
         
         log.info("Activated, name={}, languageExtension={}, expression={}", 
languageExtension, expression);
     }

Modified: 
sling/branches/SLING-2987-healthcheck-redesign/hc-core/src/main/resources/res/ui/healthcheck.css
URL: 
http://svn.apache.org/viewvc/sling/branches/SLING-2987-healthcheck-redesign/hc-core/src/main/resources/res/ui/healthcheck.css?rev=1510874&r1=1510873&r2=1510874&view=diff
==============================================================================
--- 
sling/branches/SLING-2987-healthcheck-redesign/hc-core/src/main/resources/res/ui/healthcheck.css
 (original)
+++ 
sling/branches/SLING-2987-healthcheck-redesign/hc-core/src/main/resources/res/ui/healthcheck.css
 Tue Aug  6 07:38:46 2013
@@ -32,7 +32,12 @@
     font-weight:bold;
 }
 
-.healthcheck .nothingToReport {
+.healthcheck .resultOktrue {
        color:green;
     font-weight:bold;
 }
+
+.healthcheck .resultOkfalse {
+    color:red;
+    font-weight:bold;
+}


Reply via email to