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 17:07:33 UTC

svn commit: r1513157 - in /sling/trunk/contrib/extensions/healthcheck: core/ 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/util/ it/src/test/java/org/apache/sling/hc/it/c...

Author: bdelacretaz
Date: Mon Aug 12 15:07:32 2013
New Revision: 1513157

URL: http://svn.apache.org/r1513157
Log:
SLING-2987 - splitting into several bundles, work in progress

Added:
    sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/package-info.java
    sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/util/HealthCheckSelector.java
      - copied, changed from r1513096, sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/HealthCheckSelector.java
    sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/util/package-info.java
Removed:
    sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/HealthCheckSelector.java
    sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/HealthCheckSelectorImpl.java
Modified:
    sling/trunk/contrib/extensions/healthcheck/core/pom.xml
    sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/impl/HealthCheckWebconsolePlugin.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/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/pom.xml?rev=1513157&r1=1513156&r2=1513157&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/pom.xml (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/pom.xml Mon Aug 12 15:07:32 2013
@@ -37,9 +37,6 @@
                 <extensions>true</extensions>
                 <configuration>
                     <instructions>
-                        <Export-Package>
-                            org.apache.sling.hc.api,
-                        </Export-Package>
                         <Import-Package>
                             javax.servlet.*;resolution:=optional,
                             org.apache.sling.api.request;resolution:=optional,
@@ -89,6 +86,12 @@
             <groupId>org.apache.felix</groupId>
             <artifactId>org.apache.felix.scr.annotations</artifactId>
         </dependency>
+      <dependency>
+            <groupId>biz.aQute</groupId>
+            <artifactId>bndlib</artifactId>
+            <version>1.50.0</version>
+            <scope>provided</scope>
+        </dependency>
          <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.commons.osgi</artifactId>

Added: sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/package-info.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/package-info.java?rev=1513157&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/package-info.java (added)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/package-info.java Mon Aug 12 15:07:32 2013
@@ -0,0 +1,24 @@
+/*
+ * 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 ASF 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.
+ */
+
+@Version("0.0.2")
+package org.apache.sling.hc.api;
+
+import aQute.bnd.annotation.Version;
+

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=1513157&r1=1513156&r2=1513157&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 15:07:32 2013
@@ -28,17 +28,19 @@ import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Properties;
 import org.apache.felix.scr.annotations.Property;
-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.ResultLogEntry;
+import org.apache.sling.hc.util.HealthCheckSelector;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.component.ComponentContext;
 
 /** Webconsole plugin to execute health check services */ 
 @Component(immediate=true)
@@ -61,9 +63,13 @@ public class HealthCheckWebconsolePlugin
     public static final String PARAM_DEBUG = "debug";
     public static final String PARAM_QUIET = "quiet";
     
-    @Reference
-    private HealthCheckSelector selector;
+    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();
@@ -98,7 +104,7 @@ public class HealthCheckWebconsolePlugin
         
         // Execute health checks only if tags are specified (even if empty)
         if(req.getParameter(PARAM_TAGS) != null) {
-            final List<HealthCheck> checks = selector.getTaggedHealthCheck(tags.split(","));
+            final List<HealthCheck> checks = new HealthCheckSelector(bundleContext).getTaggedHealthCheck(tags.split(","));
             final PrintWriter pw = resp.getWriter();
             pw.println("<table class='content healthcheck' cellpadding='0' cellspacing='0' width='100%'>");
             int total = 0;

Copied: sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/util/HealthCheckSelector.java (from r1513096, sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/HealthCheckSelector.java)
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/util/HealthCheckSelector.java?p2=sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/util/HealthCheckSelector.java&p1=sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/HealthCheckSelector.java&r1=1513096&r2=1513157&rev=1513157&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/api/HealthCheckSelector.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/util/HealthCheckSelector.java Mon Aug 12 15:07:32 2013
@@ -15,21 +15,67 @@
  * 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;
+package org.apache.sling.hc.util;
 
+import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.sling.hc.api.Constants;
+import org.apache.sling.hc.api.HealthCheck;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 /** Select from available {@link HealthCheck} services */
-public interface HealthCheckSelector {
+public class HealthCheckSelector {
+    
+    private final Logger log = LoggerFactory.getLogger(getClass());
+    private final BundleContext bundleContext;
+    public static final String OMIT_PREFIX = "-";
+    
+    public HealthCheckSelector(BundleContext bc) {
+        bundleContext = bc;
+    }
     
-    /** Retrieve {@link HealthCheck} services that have
-     *  specific tags (declared using the {@link Constants.HC_TAGS}
-     *  service property)
-     *  
-     *  @param tags If not supplied, all available services are
-     *  returned. A tag can be prefixed by a minus sign to omit
-     *  services having that tag. Supplied tags are combined with
-     *  AND to select within available services 
-     */
-    public List<HealthCheck> getTaggedHealthCheck(String ... tags);
+    public List<HealthCheck> getTaggedHealthCheck(String... tags) {
+        
+        // Build service filter
+        final StringBuilder filterBuilder = new StringBuilder();
+        filterBuilder.append("(&(objectClass=").append(HealthCheck.class.getName()).append(")");
+        final int prefixLen = OMIT_PREFIX.length();
+        for(String tag : tags) {
+            tag = tag.trim();
+            if(tag.length() == 0) {
+                continue;
+            }
+            if(tag.startsWith(OMIT_PREFIX)) {
+                filterBuilder.append("(!(").append(Constants.HC_TAGS).append("=").append(tag.substring(prefixLen)).append("))");
+            } else {
+                filterBuilder.append("(").append(Constants.HC_TAGS).append("=").append(tag).append(")");
+            }
+        }
+        filterBuilder.append(")");
+        
+        final List<HealthCheck> result = new ArrayList<HealthCheck>();
+        try {
+            final String filterString = filterBuilder.length() == 0 ? null : filterBuilder.toString();
+            bundleContext.createFilter(filterString); // check syntax early
+            final ServiceReference [] refs = bundleContext.getServiceReferences(HealthCheck.class.getName(), filterString);
+            if(refs == null) {
+                log.info("Found no HealthCheck services with filter [{}]", filterString);
+            } else {
+                log.info("Found {} HealthCheck services with filter [{}]", refs.length, filterString);
+                for(ServiceReference ref : refs) {
+                    final HealthCheck hc = (HealthCheck)bundleContext.getService(ref);
+                    log.debug("Selected HealthCheck service {}", hc);
+                    result.add(hc);
+                }
+            }
+        } catch(InvalidSyntaxException ise) {
+            throw new IllegalStateException("Invalid OSGi filter syntax in '" + filterBuilder + "'", ise);
+        }
+        return result;
+    }
 }

Added: sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/util/package-info.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/util/package-info.java?rev=1513157&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/util/package-info.java (added)
+++ sling/trunk/contrib/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/util/package-info.java Mon Aug 12 15:07:32 2013
@@ -0,0 +1,24 @@
+/*
+ * 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 ASF 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.
+ */
+
+@Version("0.0.2")
+package org.apache.sling.hc.util;
+
+import aQute.bnd.annotation.Version;
+

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=1513157&r1=1513156&r2=1513157&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 15:07:32 2013
@@ -33,8 +33,8 @@ import javax.inject.Inject;
 
 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.util.HealthCheckSelector;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;