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 2013/08/12 16:49:50 UTC

svn commit: r1513154 - in /sling/trunk/contrib/extensions/healthcheck: core/src/main/java/org/apache/sling/hc/api/ core/src/main/java/org/apache/sling/hc/impl/ core/src/main/java/org/apache/sling/hc/impl/healthchecks/ core/src/main/java/org/apache/slin...

Author: bdelacretaz
Date: Mon Aug 12 14:49:50 2013
New Revision: 1513154

URL: http://svn.apache.org/r1513154
Log:
SLING-2987 - refactor API, especially the Result model

Added:
    sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/ResultLogEntry.java   (with props)
    sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/util/HealthCheckInfo.java
Removed:
    sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/ResultLog.java
    sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/api/ResultLogTest.java
Modified:
    sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/HealthCheck.java
    sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/Result.java
    sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/HealthCheckMBean.java
    sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/HealthCheckWebconsolePlugin.java
    sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/DefaultLoginsHealthCheck.java
    sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/JmxAttributeHealthCheck.java
    sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/JmxScriptBinding.java
    sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/OsgiScriptBinding.java
    sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/ScriptableHealthCheck.java
    sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/SlingRequestStatusHealthCheck.java
    sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/util/SimpleConstraintChecker.java
    sling/trunk/contrib/extensions/healthcheck/core/src/main/resources/res/ui/healthcheck.css
    sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/api/ResultTest.java
    sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/DefaultLoginsHealthCheckTest.java
    sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/HealthCheckMBeanTest.java
    sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/JmxAttributeHealthCheckTest.java
    sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/JmxScriptBindingTest.java
    sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/OsgiScriptBindingTest.java
    sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/ScriptableHealthCheckTest.java
    sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/SimpleConstraintCheckerTest.java
    sling/trunk/contrib/extensions/healthcheck/it/src/test/java/org/apache/sling/hc/it/core/HealthCheckSelectorTest.java

Modified: sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/HealthCheck.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/HealthCheck.java?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/HealthCheck.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/HealthCheck.java Mon Aug 12 14:49:50 2013
@@ -23,16 +23,12 @@ import java.util.Map;
  *  return an execution Result */
 public interface HealthCheck {
     
-    /** Execute this health check.
-     * @param log Any messages written to that log at or above the
-     *            {@link ResultLog.MIN_LEVEL_TO_REPORT} level mean
-     *            that the health check failed.
-     */
-    public Result execute(ResultLog log);
+    /** Execute this health check and return a {@link Result} */
+    public Result execute();
     
     /** Additional (static) information about
      *  this check. {@link Constants} defines
-     *  some well-known property names. 
+     *  some well-known property names.
      */
     public Map<String, String> getInfo();
 }

Modified: sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/Result.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/Result.java?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/Result.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/Result.java Mon Aug 12 14:49:50 2013
@@ -17,32 +17,84 @@
  */
 package org.apache.sling.hc.api;
 
+import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 /** The result of executing a {@link HealthCheck} */
-public class Result {
+public class Result implements Iterable <ResultLogEntry >{
+
+    private final Logger logger;
+    private static final Logger CLASS_LOGGER = LoggerFactory.getLogger(Result.class);
     
-    private final HealthCheck healthCheck;
-    private final ResultLog log;
+    private final List<ResultLogEntry> logEntries = new LinkedList<ResultLogEntry>();
+    private Status status = Status.OK;
     
-    public Result(HealthCheck hc, ResultLog log) {
-        healthCheck = hc;
-        this.log = log;
+    public enum Status {
+        OK,                 // no problem
+        WARN,               // health check detected something wrong but not critical
+        CRITICAL,           // health check detected a critical problem
+        HEALTH_CHECK_ERROR  // health check did not execute properly
+    }
+    
+    /** Build a Result using the default logger */
+    public Result() {
+        this(null);
     }
 
-    public HealthCheck getHealthCheck() {
-        return healthCheck;
+    /** Build a Result that logs to a specific logger */
+    public Result(Logger logger) {
+        this.logger = logger != null ? logger : CLASS_LOGGER;
     }
     
-    public List<ResultLog.Entry> getLogEntries() {
-        return log.getEntries();
+    /** Add an entry to our log. Use the {@ResultLogEntry}.LT_* constants
+     *  for well-known entry types.
+     *  Adding an entry with a type where {@ResultLogEntry#isInformationalEntryType} returns
+     *  false causes our status to be set to WARN, unless it was already set higher.
+     */
+    public void log(String entryType, String message) {
+        if(logger.isDebugEnabled() && ResultLogEntry.LT_DEBUG.equals(entryType)) {
+            logger.debug(message);
+        } else if(logger.isInfoEnabled() && ResultLogEntry.LT_INFO.equals(entryType)) {
+            logger.info(message);
+        } else {
+            logger.warn(message);
+        }
+        logEntries.add(new ResultLogEntry(entryType, message));
+        if(!ResultLogEntry.isInformationalEntryType(entryType) && status.ordinal() < Status.WARN.ordinal()) {
+            logger.warn("Setting Result status to WARN due to log entry of type {}", entryType);
+            setStatus(Status.WARN);
+        }
     }
     
+    /** Set this Result's status. Attempts to set it lower than the current
+     *  status are ignored.
+     */
+    public void setStatus(Status s) {
+        if(s.ordinal() > status.ordinal()) {
+            status = s;
+        } else {
+            logger.debug("setStatus({}) ignored as current status {} is higher", s, status);
+        }
+    }
+    
+    public Iterator<ResultLogEntry> iterator() {
+        return logEntries.iterator();
+    }
+    
+    /** True if our status is OK - just to have a convenient way of 
+     *  checking that.
+     */
     public boolean isOk() {
-        return log.getMaxLevel() != null && log.getMaxLevel().ordinal() < ResultLog.MIN_LEVEL_TO_REPORT.ordinal();
+        return status.ordinal() == Status.OK.ordinal();
     }
     
-    public ResultLog.Level getStatus() {
-        return isOk() ? ResultLog.Level.OK : log.getMaxLevel(); 
+    /** Return our Status */
+    public Status getStatus() {
+        return status;
     }
-}
+    
+}
\ No newline at end of file

Added: sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/ResultLogEntry.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/ResultLogEntry.java?rev=1513154&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/ResultLogEntry.java (added)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/ResultLogEntry.java Mon Aug 12 14:49:50 2013
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The SF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package org.apache.sling.hc.api;
+
+
+
+/** A entry in the log of a {@link Result} */
+public class ResultLogEntry {
+    
+    private final String entryType;
+    private final String message;
+    
+    /** Standard log entry type DEBUG */
+    public static final String LT_DEBUG = "DEBUG";
+    
+    /** Standard log entry type INFO: general informational message */
+    public static final String LT_INFO = "INFO";
+    
+    /** Standard log entry type WARN: general warning message */
+    public static final String LT_WARN = "WARN";
+    
+    /** Standard log entry type SECURITY: security-related warning */
+    public static final String LT_WARN_SECURITY = "SECURITY";
+    
+    /** Standard log entry type: configuration-related warning */
+    public static final String LT_WARN_CONFIG = "CONFIG";
+    
+    /** Build a log entry.
+     * @param entryType The type of this log entry, this is a String instead of an Enum
+     *  so that health checks can invent their own types if needed.
+     *  For the usual entry types, use the LT_* constants of this class.
+     *  By convention, any log entry that's not LT_DEBUG or LT_INFO causes
+     *  the Result to move to the WARN result state, unless it already was set to a higher state.
+     *  
+     * @param message The log message.
+     */
+    ResultLogEntry(String entryType, String message) {
+        this.entryType = entryType;
+        this.message = message;
+    }
+
+    public String getEntryType() {
+        return entryType;
+    }
+
+    /** The log message */
+    public String getMessage() {
+        return message;
+    }
+
+    @Override
+    public String toString() {
+        return new StringBuilder(entryType).append(" ").append(message).toString();
+    }
+    
+    /** True if the given entryType is one that does not cause Result to
+     *  raise its state to WARN.
+     */
+    public static boolean isInformationalEntryType(String entryType) {
+        return LT_DEBUG.equals(entryType) || LT_INFO.equals(entryType);
+    }
+}

Propchange: sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/ResultLogEntry.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/HealthCheckMBean.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/HealthCheckMBean.java?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/HealthCheckMBean.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/HealthCheckMBean.java Mon Aug 12 14:49:50 2013
@@ -19,6 +19,7 @@ package org.apache.sling.hc.impl;
 
 import java.io.Serializable;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -44,7 +45,7 @@ import javax.management.openmbean.Tabula
 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.api.ResultLogEntry;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -108,8 +109,7 @@ public class HealthCheckMBean implements
             throws AttributeNotFoundException, MBeanException, ReflectionException {
         
         // TODO cache the result of execution for a few seconds?
-        final ResultLog resultLog = new ResultLog(logger);
-        final Result result = healthCheck.execute(resultLog);
+        final Result result = healthCheck.execute();
         
         if(HC_OK_ATTRIBUTE_NAME.equals(attribute)) {
             return result.isOk();
@@ -127,10 +127,10 @@ public class HealthCheckMBean implements
     private TabularData logData(Result er) {
         final TabularDataSupport result = new TabularDataSupport(LOG_TABLE_TYPE);
         int i=1;
-        for(ResultLog.Entry e : er.getLogEntries()) {
+        for(ResultLogEntry e : er) {
             final Map<String, Object> data = new HashMap<String, Object>();
             data.put(INDEX_COLUMN, i++);
-            data.put(LEVEL_COLUMN, e.getLevel().toString());
+            data.put(LEVEL_COLUMN, e.getEntryType());
             data.put(MESSAGE_COLUMN, e.getMessage());
             try {
                 result.put(new CompositeDataSupport(LOG_ROW_TYPE, data));

Modified: sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/HealthCheckWebconsolePlugin.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/HealthCheckWebconsolePlugin.java?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/HealthCheckWebconsolePlugin.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/HealthCheckWebconsolePlugin.java Mon Aug 12 14:49:50 2013
@@ -38,9 +38,7 @@ 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.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.sling.hc.api.ResultLogEntry;
 
 /** Webconsole plugin to execute health check services */ 
 @Component(immediate=true)
@@ -56,8 +54,6 @@ import org.slf4j.LoggerFactory;
 })
 public class HealthCheckWebconsolePlugin extends HttpServlet {
 
-    private final Logger log = LoggerFactory.getLogger(getClass());
-    
     public static final String TITLE = "Sling Health Check";
     public static final String LABEL = "healthcheck";
     public static final String CATEGORY = "Sling";
@@ -108,14 +104,13 @@ public class HealthCheckWebconsolePlugin
             int total = 0;
             int failed = 0;
             for(HealthCheck hc : checks) {
-                final ResultLog rl = new ResultLog(log);
-                final Result r = hc.execute(rl);
+                final Result r = hc.execute();
                 total++;
                 if(!r.isOk()) {
                     failed++;
                 }
                 if(!quiet || !r.isOk()) {
-                    renderResult(resp, r, debug);
+                    renderResult(resp, hc, r, debug);
                 }
             }
             final WebConsoleHelper c = new WebConsoleHelper(resp.getWriter());
@@ -124,12 +119,12 @@ public class HealthCheckWebconsolePlugin
         }
     }
     
-    private void renderResult(HttpServletResponse resp, Result result, boolean debug) throws IOException {
+    private void renderResult(HttpServletResponse resp, HealthCheck hc, 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);
+        status.append("Tags: ").append(hc.getInfo().get(Constants.HC_TAGS));
+        c.titleHtml(getDescription(hc), null);
         
         c.tr();
         c.tdContent();
@@ -137,20 +132,20 @@ public class HealthCheckWebconsolePlugin
         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(result.getStatus().toString());
         c.writer().print("</span>");
         c.closeTd();
         c.closeTr();
         
         c.tr();
         c.tdContent();
-        for(ResultLog.Entry e : result.getLogEntries()) {
-            if(!debug && e.getLevel().ordinal() <= ResultLog.Level.DEBUG.ordinal()) {
+        for(ResultLogEntry e : result) {
+            if(!debug && e.getEntryType().equals(ResultLogEntry.LT_DEBUG)) {
                 continue;
             }
             final StringBuilder sb = new StringBuilder();
-            sb.append("<div class='log").append(e.getLevel().toString()).append("'>");
-            sb.append(e.getLevel().toString())
+            sb.append("<div class='log").append(e.getEntryType()).append("'>");
+            sb.append(e.getEntryType())
                 .append(" ")
                 .append(ResponseUtil.escapeXml(e.getMessage()))
                 .append("</div>");

Modified: sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/DefaultLoginsHealthCheck.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/DefaultLoginsHealthCheck.java?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/DefaultLoginsHealthCheck.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/DefaultLoginsHealthCheck.java Mon Aug 12 14:49:50 2013
@@ -18,7 +18,6 @@
 package org.apache.sling.hc.impl.healthchecks;
 
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -37,7 +36,8 @@ import org.apache.sling.commons.osgi.Pro
 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.api.ResultLogEntry;
+import org.apache.sling.hc.util.HealthCheckInfo;
 import org.apache.sling.jcr.api.SlingRepository;
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
@@ -54,7 +54,7 @@ import org.slf4j.LoggerFactory;
 public class DefaultLoginsHealthCheck implements HealthCheck {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
-    private final Map<String, String> info = new HashMap<String, String>();
+    private Map<String, String> info;
     
     @Property(cardinality=500)
     public static final String PROP_LOGINS = "logins";
@@ -74,26 +74,21 @@ public class DefaultLoginsHealthCheck im
     
     @Activate
     public void activate(ComponentContext ctx) {
+        info = new HealthCheckInfo(ctx.getProperties());
         logins = Arrays.asList(PropertiesUtil.toStringArray(ctx.getProperties().get(PROP_LOGINS), new String[] {}));
-        
-        info.put(Constants.HC_NAME, PropertiesUtil.toString(ctx.getProperties().get(Constants.HC_NAME), ""));
-        info.put(Constants.HC_MBEAN_NAME, PropertiesUtil.toString(ctx.getProperties().get(Constants.HC_MBEAN_NAME), ""));
-        info.put(Constants.HC_TAGS, 
-                Arrays.asList(PropertiesUtil.toStringArray(ctx.getProperties().get(Constants.HC_TAGS), new String[] {})).toString());
-        
         log.info("Activated, logins={}", logins);
     }
     
     @Override
-    public Result execute(ResultLog log) {
-        final Result result = new Result(this, log);
+    public Result execute() {
+        final Result result = new Result(log);
         int checked=0;
         int failures=0;
         
         for(String login : logins) {
             final String [] parts = login.split(":");
             if(parts.length != 2) {
-                log.warn("Expected login in the form username:password, got {}", login);
+                result.log(ResultLogEntry.LT_WARN, "Expected login in the form username:password, got " + login);
                 continue;
             }
             checked++;
@@ -105,12 +100,12 @@ public class DefaultLoginsHealthCheck im
                 s = repository.login(creds);
                 if(s != null) {
                     failures++;
-                    log.warn("Login as [{}] succeeded, was expecting it to fail", username);
+                    result.log(ResultLogEntry.LT_WARN_SECURITY, "Login as [" + username + "] succeeded, was expecting it to fail");
                 } else {
-                    log.debug("Login as [{}] didn't throw an Exception but returned null Session", username);
+                    result.log(ResultLogEntry.LT_DEBUG, "Login as [" + username + "] didn't throw an Exception but returned null Session");
                 }
             } catch(RepositoryException re) {
-                log.debug("Login as [{}] failed, as expected", username);
+                result.log(ResultLogEntry.LT_DEBUG, "Login as [" + username + "] failed, as expected");
             } finally {
                 if(s != null) {
                     s.logout();
@@ -119,11 +114,11 @@ public class DefaultLoginsHealthCheck im
         }
         
         if(checked==0) {
-            log.warn("Did not check any logins, configured logins={}", logins);
+            result.log(ResultLogEntry.LT_WARN, "Did not check any logins, configured logins=" + logins);
         } else if(failures != 0){
-            log.warn("Checked {} logins, {} tests failed", checked, failures);
+            result.log(ResultLogEntry.LT_WARN_SECURITY, "Checked " + checked + " logins, " + failures + " tests failed");
         } else {
-            log.debug("Checked {} logins, all tests successful", checked);
+            result.log(ResultLogEntry.LT_DEBUG, "Checked " + checked + " logins, all tests successful");
         }
         return result;
     }

Modified: sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/JmxAttributeHealthCheck.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/JmxAttributeHealthCheck.java?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/JmxAttributeHealthCheck.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/JmxAttributeHealthCheck.java Mon Aug 12 14:49:50 2013
@@ -18,8 +18,6 @@
 package org.apache.sling.hc.impl.healthchecks;
 
 import java.lang.management.ManagementFactory;
-import java.util.Arrays;
-import java.util.HashMap;
 import java.util.Map;
 
 import javax.management.MBeanServer;
@@ -34,11 +32,13 @@ import org.apache.sling.commons.osgi.Pro
 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.api.ResultLogEntry;
+import org.apache.sling.hc.util.HealthCheckInfo;
 import org.apache.sling.hc.util.SimpleConstraintChecker;
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.slf4j.helpers.MessageFormatter;
 
 /** {@link HealthCheck} that checks a single JMX attribute */
 @Component(
@@ -50,7 +50,7 @@ import org.slf4j.LoggerFactory;
 public class JmxAttributeHealthCheck implements HealthCheck {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
-    private final Map<String, String> info = new HashMap<String, String>();
+    private Map<String, String> info;
     private String mbeanName;
     private String attributeName;
     private String constraint;
@@ -75,6 +75,7 @@ public class JmxAttributeHealthCheck imp
     
     @Activate
     public void activate(ComponentContext ctx) {
+        info = new HealthCheckInfo(ctx.getProperties());
         mbeanName = PropertiesUtil.toString(ctx.getProperties().get(PROP_OBJECT_NAME), "");
         attributeName = PropertiesUtil.toString(ctx.getProperties().get(PROP_ATTRIBUTE_NAME), "");
         constraint = PropertiesUtil.toString(ctx.getProperties().get(PROP_CONSTRAINT), "");
@@ -82,19 +83,17 @@ public class JmxAttributeHealthCheck imp
         info.put(PROP_OBJECT_NAME, mbeanName);
         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_MBEAN_NAME, PropertiesUtil.toString(ctx.getProperties().get(Constants.HC_MBEAN_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 });
     }
     
     @Override
-    public Result execute(ResultLog log) {
-        final Result result = new Result(this, log);
-        log.debug("Checking {} / {} with constraint {}", new Object[] { mbeanName, attributeName, constraint });
+    public Result execute() {
+        final Result result = new Result(log);
+        result.log(ResultLogEntry.LT_DEBUG, 
+                MessageFormatter.format("Checking {} / {} with constraint {}", 
+                        new Object[] { mbeanName, attributeName, constraint }).getMessage());
         try {
             final MBeanServer jmxServer = ManagementFactory.getPlatformMBeanServer();
             final ObjectName objectName = new ObjectName(mbeanName);
@@ -103,7 +102,7 @@ public class JmxAttributeHealthCheck imp
             }
             final Object value = jmxServer.getAttribute(objectName, attributeName);
             log.debug("{} {} returns {}", new Object[] { mbeanName, attributeName, value });
-            new SimpleConstraintChecker().check(value, constraint, log);
+            new SimpleConstraintChecker().check(value, constraint, result);
         } catch(Exception e) {
             log.warn(e.toString(), e);
         }

Modified: sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/JmxScriptBinding.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/JmxScriptBinding.java?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/JmxScriptBinding.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/JmxScriptBinding.java Mon Aug 12 14:49:50 2013
@@ -27,7 +27,9 @@ import javax.management.MalformedObjectN
 import javax.management.ObjectName;
 import javax.management.ReflectionException;
 
-import org.slf4j.Logger;
+import org.apache.sling.hc.api.Result;
+import org.apache.sling.hc.api.ResultLogEntry;
+import org.slf4j.helpers.MessageFormatter;
 
 /** The JmxBinding is meant to be bound as "jmx" global variables
  *  in scripted rules, to allow for writing scripted expressions
@@ -35,10 +37,10 @@ import org.slf4j.Logger;
  */
 public class JmxScriptBinding {
     private MBeanServer jmxServer = ManagementFactory.getPlatformMBeanServer();
-    private final Logger logger;
+    private final Result result;
     
-    public JmxScriptBinding(Logger logger) {
-        this.logger = logger;
+    public JmxScriptBinding(Result result) {
+        this.result = result;
     }
     
     public Object attribute(String objectNameString, String attributeName) 
@@ -46,12 +48,15 @@ public class JmxScriptBinding {
         final ObjectName name = new ObjectName(objectNameString);
         if(jmxServer.queryNames(name, null).size() == 0) {
             final String msg = "JMX object name not found: [" + objectNameString + "]";
-            logger.warn(msg);
+            result.log(ResultLogEntry.LT_WARN, msg);
             throw new IllegalStateException(msg);
         }
-        logger.debug("Got JMX Object [{}]", name);
+        result.log(ResultLogEntry.LT_DEBUG, MessageFormatter.format("Got JMX Object [{}]", name).getMessage());
         final Object value = jmxServer.getAttribute(name, attributeName);
-        logger.debug("JMX Object [{}] Attribute [{}] = [{}]", new Object[] { name, attributeName, value });
+        result.log(ResultLogEntry.LT_DEBUG, 
+                MessageFormatter.format(
+                        "JMX Object [{}] Attribute [{}] = [{}]", 
+                        new Object[] { name, attributeName, value }).getMessage());
         return value;
     }
 }
\ No newline at end of file

Modified: sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/OsgiScriptBinding.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/OsgiScriptBinding.java?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/OsgiScriptBinding.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/OsgiScriptBinding.java Mon Aug 12 14:49:50 2013
@@ -17,21 +17,23 @@
  */
 package org.apache.sling.hc.impl.healthchecks;
 
+import org.apache.sling.hc.api.Result;
+import org.apache.sling.hc.api.ResultLogEntry;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
-import org.slf4j.Logger;
+import org.slf4j.helpers.MessageFormatter;
 
 /** The OsgiBinding is meant to be bound as an "osgi" global variable
  *  in scripted rules, to allow for checking some OSGi states in
  *  a simple way
  */
 public class OsgiScriptBinding {
-    private final Logger logger;
+    private final Result result;
     private final BundleContext bundleContext;
     
-    public OsgiScriptBinding(BundleContext ctx, Logger logger) {
-        this.logger = logger;
+    public OsgiScriptBinding(BundleContext ctx, Result result) {
+        this.result = result;
         this.bundleContext = ctx;
     }
     
@@ -42,24 +44,27 @@ public class OsgiScriptBinding {
                 count++;
             }
         }
-        logger.debug("inactiveBundlesCount={}", count);
+        result.log(ResultLogEntry.LT_DEBUG, MessageFormatter.format("inactiveBundlesCount={}", count).getMessage());
         return count;
     }
     
     private boolean isActive(Bundle b) {
-        boolean result = true;
+        boolean active = true;
         if(!isFragment(b) && Bundle.ACTIVE != b.getState()) {
-            result = false;
-            logger.info("Bundle {} is not active, state={} ({})", 
-                    new Object[] { b.getSymbolicName(), b.getState(), b.getState()});
+            active = false;
+            result.log(ResultLogEntry.LT_INFO, 
+                    MessageFormatter.format(
+                            "Bundle {} is not active, state={} ({})", 
+                            new Object[] { b.getSymbolicName(), b.getState(), b.getState()}).getMessage());
         }
-        return result;
+        return active;
     }
     
     private boolean isFragment(Bundle b) {
         final String header = (String) b.getHeaders().get( Constants.FRAGMENT_HOST );
         if(header!= null && header.trim().length() > 0) {
-            logger.debug("{} is a fragment bundle, state won't be checked", b);
+            result.log(ResultLogEntry.LT_DEBUG, 
+                    MessageFormatter.format("{} is a fragment bundle, state won't be checked", b).getMessage());
             return true;
         } else {
             return false;

Modified: sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/ScriptableHealthCheck.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/ScriptableHealthCheck.java?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/ScriptableHealthCheck.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/ScriptableHealthCheck.java Mon Aug 12 14:49:50 2013
@@ -17,8 +17,6 @@
  */
 package org.apache.sling.hc.impl.healthchecks;
 
-import java.util.Arrays;
-import java.util.HashMap;
 import java.util.Map;
 
 import javax.script.Bindings;
@@ -35,11 +33,13 @@ import org.apache.sling.commons.osgi.Pro
 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.api.ResultLogEntry;
+import org.apache.sling.hc.util.HealthCheckInfo;
 import org.osgi.framework.BundleContext;
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.slf4j.helpers.MessageFormatter;
 
 /** {@link HealthCheck} that checks a scriptable expression */
 @Component(
@@ -51,7 +51,7 @@ import org.slf4j.LoggerFactory;
 public class ScriptableHealthCheck implements HealthCheck {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
-    private final Map<String, String> info = new HashMap<String, String>();
+    private Map<String, String> info;
     private String expression;
     private String languageExtension;
     private BundleContext bundleContext;
@@ -78,42 +78,50 @@ public class ScriptableHealthCheck imple
     
     @Activate
     public void activate(ComponentContext ctx) {
+        info = new HealthCheckInfo(ctx.getProperties());
         bundleContext = ctx.getBundleContext();
         expression = PropertiesUtil.toString(ctx.getProperties().get(PROP_EXPRESSION), "");
         languageExtension = PropertiesUtil.toString(ctx.getProperties().get(PROP_LANGUAGE_EXTENSION), DEFAULT_LANGUAGE_EXTENSION);
         
         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_MBEAN_NAME, PropertiesUtil.toString(ctx.getProperties().get(Constants.HC_MBEAN_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);
     }
     
     @Override
-    public Result execute(ResultLog log) {
-        final Result result = new Result(this, log);
-        log.debug("Checking expression [{}], language extension=[{}]", expression, languageExtension);
+    public Result execute() {
+        final Result result = new Result(log);
+        result.log(ResultLogEntry.LT_DEBUG, 
+                MessageFormatter.format(
+                        "Checking expression [{}], language extension=[{}]", 
+                        expression, languageExtension).getMessage());
         try {
             final ScriptEngine engine = scriptEngineManager.getEngineByExtension(languageExtension);
             if(engine == null) {
-                log.warn("No ScriptEngine available for extension {}", languageExtension);
+                result.log(ResultLogEntry.LT_WARN, 
+                        MessageFormatter.format(
+                                "No ScriptEngine available for extension {}", 
+                                languageExtension).getMessage());
             } else {
                 // TODO pluggable Bindings? Reuse the Sling bindings providers?
                 final Bindings b = engine.createBindings();
-                b.put("jmx", new JmxScriptBinding(log));
-                b.put("osgi", new OsgiScriptBinding(bundleContext, log));
+                b.put("jmx", new JmxScriptBinding(result));
+                b.put("osgi", new OsgiScriptBinding(bundleContext, result));
                 final Object value = engine.eval(expression, b);
                 if(value!=null && "true".equals(value.toString())) {
-                    log.debug("Expression [{}] evaluates to true as expected", expression);
+                    result.log(ResultLogEntry.LT_DEBUG, 
+                            MessageFormatter.format(
+                                    "Expression [{}] evaluates to true as expected", expression).getMessage());
                 } else {
-                    log.warn("Expression [{}] does not evaluate to true, value={}", expression, value);
+                    result.log(ResultLogEntry.LT_WARN, 
+                            MessageFormatter.format(
+                                    "Expression [{}] does not evaluate to true, value={}", 
+                                    expression, value).getMessage());
                 }
             }
         } catch(Exception e) {
-            log.warn(e.toString(), e);
+            result.log(ResultLogEntry.LT_WARN, e.toString()); 
         }
         return result;
     }

Modified: sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/SlingRequestStatusHealthCheck.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/SlingRequestStatusHealthCheck.java?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/SlingRequestStatusHealthCheck.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/healthchecks/SlingRequestStatusHealthCheck.java Mon Aug 12 14:49:50 2013
@@ -18,7 +18,6 @@
 package org.apache.sling.hc.impl.healthchecks;
 
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
@@ -36,10 +35,12 @@ import org.apache.sling.engine.SlingRequ
 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.api.ResultLogEntry;
+import org.apache.sling.hc.util.HealthCheckInfo;
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.slf4j.helpers.MessageFormatter;
 
 /** {@link HealthCheck} that checks the HTTP status of Sling requests */
 @Component(
@@ -51,7 +52,7 @@ import org.slf4j.LoggerFactory;
 public class SlingRequestStatusHealthCheck implements HealthCheck {
 
     private static final Logger log = LoggerFactory.getLogger(SlingRequestStatusHealthCheck.class);
-    private final Map<String, String> info = new HashMap<String, String>();
+    private Map<String, String> info;
     private String [] paths;
     
     static class PathSpec {
@@ -94,19 +95,14 @@ public class SlingRequestStatusHealthChe
     
     @Activate
     public void activate(ComponentContext ctx) {
+        info = new HealthCheckInfo(ctx.getProperties());
         paths = PropertiesUtil.toStringArray(ctx.getProperties().get(PROP_PATH), new String [] {});
-        
-        info.put(Constants.HC_NAME, PropertiesUtil.toString(ctx.getProperties().get(Constants.HC_NAME), ""));
-        info.put(Constants.HC_MBEAN_NAME, PropertiesUtil.toString(ctx.getProperties().get(Constants.HC_MBEAN_NAME), ""));
-        info.put(Constants.HC_TAGS, 
-                Arrays.asList(PropertiesUtil.toStringArray(ctx.getProperties().get(Constants.HC_TAGS), new String[] {})).toString());
-        
         log.info("Activated, paths={}", Arrays.asList(paths));
     }
     
     @Override
-    public Result execute(ResultLog log) {
-        final Result result = new Result(this, log);
+    public Result execute() {
+        final Result result = new Result(log);
         
         ResourceResolver resolver = null;
         int checked = 0;
@@ -122,14 +118,18 @@ public class SlingRequestStatusHealthChe
                 final int status = response.getStatus();
                 if(status != ps.status) {
                     failed++;
-                    log.warn("[{}] returns status {}, expected {}", new Object[] { ps.path, status, ps.status });
+                    result.log(ResultLogEntry.LT_WARN,
+                            MessageFormatter.format(
+                            "[{}] returns status {}, expected {}", new Object[] { ps.path, status, ps.status }).getMessage());
                 } else {
-                    log.debug("[{}] returns status {} as expected", ps.path, status);
+                    result.log(ResultLogEntry.LT_DEBUG,
+                            MessageFormatter.format(
+                            "[{}] returns status {} as expected", ps.path, status).getMessage());
                 }
                 checked++;
             }
         } catch(Exception e) {
-            log.warn("Exception while executing request", e);
+            result.log(ResultLogEntry.LT_WARN, "Exception while executing request: " + e.toString());
         } finally {
             if(resolver != null) {
                 resolver.close();
@@ -137,9 +137,11 @@ public class SlingRequestStatusHealthChe
         }
         
         if(checked == 0) {
-            log.warn("No paths checked, empty paths list?");
+            result.log(ResultLogEntry.LT_WARN, "No paths checked, empty paths list?");
         } else {
-            log.debug("{} paths checked, {} failures", checked, failed);
+            result.log(ResultLogEntry.LT_DEBUG, 
+                    MessageFormatter.format(
+                            "{} paths checked, {} failures", checked, failed).getMessage());
         }
         
         return result;

Added: sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/util/HealthCheckInfo.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/util/HealthCheckInfo.java?rev=1513154&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/util/HealthCheckInfo.java (added)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/util/HealthCheckInfo.java Mon Aug 12 14:49:50 2013
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The SF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package org.apache.sling.hc.util;
+
+import java.util.Arrays;
+import java.util.Dictionary;
+import java.util.HashMap;
+
+import org.apache.sling.commons.osgi.PropertiesUtil;
+import org.apache.sling.hc.api.Constants;
+
+// TODO move to services bundle
+
+/** Utility that copies useful HealthCheck service
+ *  properties to a Map that can be used as the Result's
+ *  info(). Copies all service properties that have names
+ *  that start with the {#Constants.HC_PROP_PREFIX} */
+public class HealthCheckInfo extends HashMap<String, String> {
+    private static final long serialVersionUID = 8661195387931574705L;
+
+    public HealthCheckInfo(Dictionary<?, ?> serviceProperties) {
+        put(Constants.HC_NAME, PropertiesUtil.toString(serviceProperties.get(Constants.HC_NAME), ""));
+        put(Constants.HC_MBEAN_NAME, PropertiesUtil.toString(serviceProperties.get(Constants.HC_MBEAN_NAME), ""));
+        put(Constants.HC_TAGS, 
+                Arrays.asList(PropertiesUtil.toStringArray(serviceProperties.get(Constants.HC_TAGS), new String[] {})).toString());
+    }
+}
\ No newline at end of file

Modified: sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/util/SimpleConstraintChecker.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/util/SimpleConstraintChecker.java?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/util/SimpleConstraintChecker.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/util/SimpleConstraintChecker.java Mon Aug 12 14:49:50 2013
@@ -17,7 +17,9 @@
  */
 package org.apache.sling.hc.util;
 
-import org.slf4j.Logger;
+import org.apache.sling.hc.api.Result;
+import org.apache.sling.hc.api.ResultLogEntry;
+import org.slf4j.helpers.MessageFormatter;
 
 /** Simple check of numeric values against expressions
  *  like < N, > N, between two values etc.
@@ -27,8 +29,8 @@ public class SimpleConstraintChecker {
     
     public static final String CONTAINS = "contains";
     
-    /** Check value against expression and report to logger */
-    public void check(Object inputValue, String constraint, Logger logger) {
+    /** Check value against expression and report to result */
+    public void check(Object inputValue, String constraint, Result result) {
         
         final String stringValue = inputValue == null ? "" : inputValue.toString();
         
@@ -62,13 +64,19 @@ public class SimpleConstraintChecker {
                 matches = constraint.equals(stringValue); 
             }
         } catch(NumberFormatException nfe) {
-            logger.warn("Invalid numeric value [{}] while evaluating {}", inputValue, constraint);
+            result.log(ResultLogEntry.LT_WARN, 
+                    MessageFormatter.format(
+                    "Invalid numeric value [{}] while evaluating {}", inputValue, constraint).getMessage());
         }
         
         if(matches) {
-            logger.debug("Value [{}] matches constraint [{}]", stringValue, constraint);
+            result.log(ResultLogEntry.LT_DEBUG, 
+                    MessageFormatter.format(
+                    "Value [{}] matches constraint [{}]", stringValue, constraint).getMessage());
         } else {
-            logger.warn("Value [{}] does not match constraint [{}]", stringValue, constraint);
+            result.log(ResultLogEntry.LT_WARN, 
+                    MessageFormatter.format(
+                    "Value [{}] does not match constraint [{}]", stringValue, constraint).getMessage());
         }
     }
 }
\ No newline at end of file

Modified: sling/trunk/contrib/extensions/healthcheck/core/src/main/resources/res/ui/healthcheck.css
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/main/resources/res/ui/healthcheck.css?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/main/resources/res/ui/healthcheck.css (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/main/resources/res/ui/healthcheck.css Mon Aug 12 14:49:50 2013
@@ -23,7 +23,10 @@
     color:blue;
 }
 
-.healthcheck .logWARN {
+.healthcheck .logWARN,
+.healthcheck .logSECURITY,
+.healthcheck .logCONFIG
+{
     color:red;
 }
 

Modified: sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/api/ResultTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/api/ResultTest.java?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/api/ResultTest.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/api/ResultTest.java Mon Aug 12 14:49:50 2013
@@ -17,49 +17,98 @@
  */
 package org.apache.sling.hc.api;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-import org.junit.Before;
+import java.util.Iterator;
+
 import org.junit.Test;
-import org.slf4j.LoggerFactory;
+import org.mockito.Matchers;
+import org.mockito.Mockito;
+import org.slf4j.Logger;
 
 public class ResultTest {
-    private ResultLog resultLog;
-    private Result result;
     
-    @Before
-    public void setup() {
-        resultLog = new ResultLog(LoggerFactory.getLogger(getClass()));
-        result = new Result(null, resultLog);
+    @Test
+    public void testInitiallyOk() {
+        final Result result = new Result();
+        assertFalse(result.iterator().hasNext());
+        assertTrue(result.isOk());
     }
     
     @Test
-    public void testInitiallyNotOk() {
-        assertFalse(result.isOk());
+    public void testDebugLogNoChange() {
+        final Result result = new Result();
+        result.log(ResultLogEntry.LT_DEBUG, "Some debug message");
+        assertTrue(result.iterator().hasNext());
+        assertTrue(result.isOk());
     }
     
     @Test
-    public void testDebugOk() {
-        resultLog.debug("something");
+    public void testInfoLogNoChange() {
+        final Result result = new Result();
+        result.log(ResultLogEntry.LT_INFO, "Some info message");
+        assertTrue(result.iterator().hasNext());
         assertTrue(result.isOk());
     }
     
     @Test
-    public void testInfoOk() {
-        resultLog.info("something");
-        assertTrue(result.isOk());
+    public void testOthersTypesSetStatusWarn() {
+        final String [] entryTypes = new String [] {
+            ResultLogEntry.LT_WARN,
+            ResultLogEntry.LT_WARN_CONFIG,
+            ResultLogEntry.LT_WARN_SECURITY,
+            "SomeNewLogEntryType" + System.currentTimeMillis()
+        };
+        
+        for(String et : entryTypes) {
+            final Result result = new Result();
+            result.log(et, "Some message");
+            assertTrue(result.iterator().hasNext());
+            assertTrue(result.getStatus().equals(Result.Status.WARN));
+        }
+    }
+    
+    @Test
+    public void testNoStatusChangeIfAlreadyCritical() {
+        final Result result = new Result();
+        result.setStatus(Result.Status.CRITICAL);
+        assertTrue(result.getStatus().equals(Result.Status.CRITICAL));
+        result.log(ResultLogEntry.LT_WARN, "Some message");
+        assertTrue(result.iterator().hasNext());
+        assertTrue(result.getStatus().equals(Result.Status.CRITICAL));
+    }
+    
+    @Test
+    public void testSuppliedLogger() {
+        final Logger myLogger = Mockito.mock(Logger.class);
+        final Result r = new Result(myLogger);
+        r.log("foo", "Some message");
+        Mockito.verify(myLogger).warn(Matchers.anyString());
     }
     
     @Test
-    public void testWarnNotOk() {
-        resultLog.warn("something");
-        assertFalse(result.isOk());
+    public void testLogEntries() {
+        final Result r = new Result();
+        r.log("ONE", "M1");
+        r.log("two", "M2");
+        r.log("THREE", "M3");
+        
+        final Iterator<ResultLogEntry> it = r.iterator();
+        assertEquals("ONE", it.next().getEntryType());
+        assertEquals("two", it.next().getEntryType());
+        assertEquals("THREE", it.next().getEntryType());
+        assertFalse(it.hasNext());
     }
     
     @Test
-    public void testErrorNotOk() {
-        resultLog.error("something");
-        assertFalse(result.isOk());
+    public void testSetStatus() {
+        final Result r = new Result();
+        assertEquals("Expecting initial OK status", Result.Status.OK, r.getStatus());
+        r.setStatus(Result.Status.CRITICAL);
+        assertEquals("Expecting CRITICAL status after setting it", Result.Status.CRITICAL, r.getStatus());
+        r.setStatus(Result.Status.WARN);
+        assertEquals("Still expecting CRITICAL status after setting it to WARN", Result.Status.CRITICAL, r.getStatus());
     }
 }

Modified: sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/DefaultLoginsHealthCheckTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/DefaultLoginsHealthCheckTest.java?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/DefaultLoginsHealthCheckTest.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/DefaultLoginsHealthCheckTest.java Mon Aug 12 14:49:50 2013
@@ -28,7 +28,6 @@ import javax.jcr.Session;
 import javax.jcr.SimpleCredentials;
 
 import org.apache.sling.hc.api.Result;
-import org.apache.sling.hc.api.ResultLog;
 import org.apache.sling.hc.impl.healthchecks.DefaultLoginsHealthCheck;
 import org.apache.sling.jcr.api.SlingRepository;
 import org.junit.Test;
@@ -36,13 +35,9 @@ import org.mockito.Matchers;
 import org.mockito.Mockito;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class DefaultLoginsHealthCheckTest {
     
-    private final Logger logger = LoggerFactory.getLogger(getClass());
-    
     private Result getTestResult(String login) throws Exception {
         final DefaultLoginsHealthCheck c = new DefaultLoginsHealthCheck();
         setField(c, "logins", Arrays.asList(new String[] { login }));
@@ -61,8 +56,7 @@ public class DefaultLoginsHealthCheckTes
             }
         });
         
-        final ResultLog log = new ResultLog(logger);
-        return c.execute(log);
+        return c.execute();
     }
     
     private void setField(Object o, String name, Object value) throws Exception {

Modified: sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/HealthCheckMBeanTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/HealthCheckMBeanTest.java?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/HealthCheckMBeanTest.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/HealthCheckMBeanTest.java Mon Aug 12 14:49:50 2013
@@ -26,7 +26,7 @@ import javax.management.ObjectName;
 
 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.api.ResultLogEntry;
 import org.junit.Test;
 
 public class HealthCheckMBeanTest {
@@ -43,12 +43,12 @@ public class HealthCheckMBeanTest {
     private HealthCheck testHealthCheck = new HealthCheck() {
 
         @Override
-        public Result execute(ResultLog log) {
-            final Result result = new Result(this, log);
+        public Result execute() {
+            final Result result = new Result();
             if(resultOk) {
-                log.debug("Nothing to report, result ok");
+                result.log(ResultLogEntry.LT_DEBUG, "Nothing to report, result ok");
             } else {
-                log.warn("Result is not ok!");
+                result.log(ResultLogEntry.LT_WARN, "Result is not ok!");
             }
             return result;
         }

Modified: sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/JmxAttributeHealthCheckTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/JmxAttributeHealthCheckTest.java?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/JmxAttributeHealthCheckTest.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/JmxAttributeHealthCheckTest.java Mon Aug 12 14:49:50 2013
@@ -17,24 +17,21 @@
  */
 package org.apache.sling.hc.impl;
 
-import static org.junit.Assert.fail;
+import static org.junit.Assert.assertEquals;
 
 import java.util.Dictionary;
 import java.util.Hashtable;
 
 import org.apache.sling.hc.api.Result;
-import org.apache.sling.hc.api.ResultLog;
 import org.apache.sling.hc.impl.healthchecks.JmxAttributeHealthCheck;
 import org.junit.Test;
 import org.mockito.Mockito;
 import org.osgi.service.component.ComponentContext;
-import org.slf4j.LoggerFactory;
 
 public class JmxAttributeHealthCheckTest {
     
     static void assertJmxValue(String objectName, String attributeName, String constraint, boolean expected) {
         final JmxAttributeHealthCheck hc = new JmxAttributeHealthCheck();
-        final ResultLog log = new ResultLog(LoggerFactory.getLogger(JmxAttributeHealthCheckTest.class));
         
         final ComponentContext ctx = Mockito.mock(ComponentContext.class);
         final Dictionary<String, String> props = new Hashtable<String, String>();
@@ -44,10 +41,8 @@ public class JmxAttributeHealthCheckTest
         Mockito.when(ctx.getProperties()).thenReturn(props);
         hc.activate(ctx);
         
-        final Result r = hc.execute(log);
-        if(r.isOk() != expected) {
-            fail("HealthCheck result is " + r.isOk() + ", log=" + r.getLogEntries());
-        }
+        final Result r = hc.execute();
+        assertEquals("Expected result " + expected, expected, r.isOk());
     }
     
     @Test

Modified: sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/JmxScriptBindingTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/JmxScriptBindingTest.java?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/JmxScriptBindingTest.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/JmxScriptBindingTest.java Mon Aug 12 14:49:50 2013
@@ -17,21 +17,25 @@
  */
 package org.apache.sling.hc.impl;
 
-import org.apache.sling.hc.impl.healthchecks.JmxScriptBinding;
-import org.junit.Test;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
+
+import org.apache.sling.hc.api.Result;
+import org.apache.sling.hc.impl.healthchecks.JmxScriptBinding;
+import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class JmxScriptBindingTest {
+    
     private final Logger logger = LoggerFactory.getLogger(getClass());
     
     @Test
     public void testJmxAttribute() throws Exception {
-        final JmxScriptBinding b = new JmxScriptBinding(logger);
-        final Object result = b.attribute("java.lang:type=ClassLoading", "LoadedClassCount");
-        assertNotNull("Expecting non-null attribute value", result);
-        assertTrue("Expecting non-empty value", result.toString().length() > 0);
+        final Result r = new Result(logger);
+        final JmxScriptBinding b = new JmxScriptBinding(r);
+        final Object value= b.attribute("java.lang:type=ClassLoading", "LoadedClassCount");
+        assertNotNull("Expecting non-null attribute value", value);
+        assertTrue("Expecting non-empty value", value.toString().length() > 0);
     }
 }
\ No newline at end of file

Modified: sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/OsgiScriptBindingTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/OsgiScriptBindingTest.java?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/OsgiScriptBindingTest.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/OsgiScriptBindingTest.java Mon Aug 12 14:49:50 2013
@@ -22,6 +22,7 @@ import static org.junit.Assert.assertEqu
 import java.util.Dictionary;
 import java.util.Hashtable;
 
+import org.apache.sling.hc.api.Result;
 import org.apache.sling.hc.impl.healthchecks.OsgiScriptBinding;
 import org.junit.Test;
 import org.mockito.Mockito;
@@ -59,7 +60,8 @@ public class OsgiScriptBindingTest {
         };
         Mockito.when(ctx.getBundles()).thenReturn(bundles);
         
-        final OsgiScriptBinding b = new OsgiScriptBinding(ctx, logger);
+        final Result r = new Result(logger);
+        final OsgiScriptBinding b = new OsgiScriptBinding(ctx, r);
         assertEquals(1, b.inactiveBundlesCount());
     }
 }
\ No newline at end of file

Modified: sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/ScriptableHealthCheckTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/ScriptableHealthCheckTest.java?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/ScriptableHealthCheckTest.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/ScriptableHealthCheckTest.java Mon Aug 12 14:49:50 2013
@@ -17,8 +17,8 @@
  */
 package org.apache.sling.hc.impl;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
 
 import java.lang.reflect.Field;
 import java.util.Dictionary;
@@ -28,24 +28,20 @@ import javax.script.ScriptEngine;
 import javax.script.ScriptEngineManager;
 
 import org.apache.sling.hc.api.Result;
-import org.apache.sling.hc.api.ResultLog;
 import org.apache.sling.hc.impl.healthchecks.ScriptableHealthCheck;
 import org.junit.Test;
 import org.mockito.Matchers;
 import org.mockito.Mockito;
 import org.osgi.service.component.ComponentContext;
-import org.slf4j.LoggerFactory;
 
 public class ScriptableHealthCheckTest {
     
     private ScriptableHealthCheck hc;
-    private ResultLog log;
     private Dictionary<String, String> props;
     private ComponentContext ctx;
 
     private void assertExpression(String expression, String languageExtension, boolean expected) throws Exception {
         hc = new ScriptableHealthCheck();
-        log = new ResultLog(LoggerFactory.getLogger(getClass()));
         ctx = Mockito.mock(ComponentContext.class);
         props = new Hashtable<String, String>();
         
@@ -63,10 +59,8 @@ public class ScriptableHealthCheckTest {
         }
         Mockito.when(ctx.getProperties()).thenReturn(props);
         hc.activate(ctx);
-        final Result r = hc.execute(log);
-        if(r.isOk() != expected) {
-            fail("HealthCheck result is " + r.isOk() + ", log=" + r.getLogEntries());
-        }
+        final Result r = hc.execute();
+        assertEquals("Expecting result " + expected, expected, r.isOk());
     }
     
     @Test

Modified: sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/SimpleConstraintCheckerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/SimpleConstraintCheckerTest.java?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/SimpleConstraintCheckerTest.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/impl/SimpleConstraintCheckerTest.java Mon Aug 12 14:49:50 2013
@@ -21,150 +21,146 @@ import static org.junit.Assert.assertFal
 import static org.junit.Assert.assertTrue;
 
 import org.apache.sling.hc.api.Result;
-import org.apache.sling.hc.api.ResultLog;
 import org.apache.sling.hc.util.SimpleConstraintChecker;
 import org.junit.Before;
 import org.junit.Test;
-import org.slf4j.LoggerFactory;
 
 public class SimpleConstraintCheckerTest {
-    private ResultLog resultLog;
     private Result result; 
 
     private final SimpleConstraintChecker checker = new SimpleConstraintChecker();
 
     @Before
     public void setup() {
-        resultLog = new ResultLog(LoggerFactory.getLogger(getClass()));
-        result = new Result(null, resultLog);
+        result = new Result();
     }
     
     @Test
     public void testStringEquals() {
         final String s = "test_" + System.currentTimeMillis();
-        checker.check(s, s, resultLog);
+        checker.check(s, s, result);
         assertTrue(result.isOk());
     }
     
     @Test
     public void testStringNotEquals() {
         final String s = "test_" + System.currentTimeMillis();
-        checker.check(s, "something else", resultLog);
+        checker.check(s, "something else", result);
         assertFalse(result.isOk());
     }
     
     @Test
     public void testFiveEquals() {
         final String s = "5";
-        checker.check(s, s, resultLog);
+        checker.check(s, s, result);
         assertTrue(result.isOk());
     }
     
     @Test
     public void testIntTwelveEquals() {
-        checker.check(12, "12", resultLog);
+        checker.check(12, "12", result);
         assertTrue(result.isOk());
     }
     
     @Test
     public void testIntTwelveGreaterThan() {
-        checker.check(12, "> 11", resultLog);
+        checker.check(12, "> 11", result);
         assertTrue(result.isOk());
     }
     
     @Test
     public void testFiveNotEquals() {
-        checker.check("5", "foo", resultLog);
+        checker.check("5", "foo", result);
         assertFalse(result.isOk());
     }
     
     @Test
     public void testNullNotEquals() {
-        checker.check(null, "foo", resultLog);
+        checker.check(null, "foo", result);
         assertFalse(result.isOk());
     }
     
     @Test
     public void testNullNotGreater() {
-        checker.check(null, "> 2", resultLog);
+        checker.check(null, "> 2", result);
         assertFalse(result.isOk());
     }
     
     @Test
     public void testGreaterThanTrue() {
-        checker.check("5", "> 2", resultLog);
+        checker.check("5", "> 2", result);
         assertTrue(result.isOk());
     }
     
     @Test
     public void testGreaterThanFalse() {
-        checker.check("5", "> 12", resultLog);
+        checker.check("5", "> 12", result);
         assertFalse(result.isOk());
     }
     
     @Test
     public void testLessThanTrue() {
-        checker.check("5", "< 12", resultLog);
+        checker.check("5", "< 12", result);
         assertTrue(result.isOk());
     }
     
     @Test
     public void testLessThanFalse() {
-        checker.check("5", "< 2", resultLog);
+        checker.check("5", "< 2", result);
         assertFalse(result.isOk());
     }
     
     @Test
     public void testBetweenA() {
-        checker.check("5", "between 2 and 6", resultLog);
+        checker.check("5", "between 2 and 6", result);
         assertTrue(result.isOk());
     }
     
     @Test
     public void testBetweenB() {
-        checker.check("5", "between 12 and 16", resultLog);
+        checker.check("5", "between 12 and 16", result);
         assertFalse(result.isOk());
     }
     
     @Test
     public void testBetweenC() {
-        checker.check(5L, "between 12 and 16", resultLog);
+        checker.check(5L, "between 12 and 16", result);
         assertFalse(result.isOk());
     }
     
     @Test
     public void testBetweenD() {
-        checker.check(5L, "between 4 and 16", resultLog);
+        checker.check(5L, "between 4 and 16", result);
         assertTrue(result.isOk());
     }
     
     @Test
     public void testBetweenE() {
-        checker.check(5L, "betWEEN 4 aND 16", resultLog);
+        checker.check(5L, "betWEEN 4 aND 16", result);
         assertTrue(result.isOk());
     }
     
     @Test
     public void testNotAnInteger() {
-        checker.check("foo", "between 12 and 16", resultLog);
+        checker.check("foo", "between 12 and 16", result);
         assertFalse(result.isOk());
     }
     
     @Test
     public void testContainsA() {
-        checker.check("This is a NICE STRING ok?", "contains NICE STRING", resultLog);
+        checker.check("This is a NICE STRING ok?", "contains NICE STRING", result);
         assertTrue(result.isOk());
     }
     
     @Test
     public void testContainsB() {
-        checker.check("This is a NICE TOUCH ok?", "contains NICE STRING", resultLog);
+        checker.check("This is a NICE TOUCH ok?", "contains NICE STRING", result);
         assertFalse(result.isOk());
     }
     
     @Test
     public void testContainsC() {
-        checker.check("This is a NICE TOUCH ok?", "contains NICE", resultLog);
+        checker.check("This is a NICE TOUCH ok?", "contains NICE", result);
         assertTrue(result.isOk());
     }
 }

Modified: sling/trunk/contrib/extensions/healthcheck/it/src/test/java/org/apache/sling/hc/it/core/HealthCheckSelectorTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/it/src/test/java/org/apache/sling/hc/it/core/HealthCheckSelectorTest.java?rev=1513154&r1=1513153&r2=1513154&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/it/src/test/java/org/apache/sling/hc/it/core/HealthCheckSelectorTest.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/it/src/test/java/org/apache/sling/hc/it/core/HealthCheckSelectorTest.java Mon Aug 12 14:49:50 2013
@@ -35,7 +35,6 @@ 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.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -96,7 +95,7 @@ public class HealthCheckSelectorTest {
         }
         
         @Override
-        public Result execute(ResultLog log) {
+        public Result execute() {
             return null;
         }