You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:39:56 UTC

[sling-org-apache-sling-hc-support] 09/31: SLING-3021 : Use service properties for HC meta data and improve JMX registration

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.hc.support-1.0.4
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-hc-support.git

commit 3abcf33ac2eee1652a1d6fab12f35d5e6d1643f1
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Mon Aug 19 06:21:19 2013 +0000

    SLING-3021 :  Use service properties for HC meta data and improve JMX registration
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/healthcheck/healthchecks@1515281 13f79535-47bb-0310-9956-ffa450edef68
---
 .../hc/healthchecks/impl/CompositeHealthCheck.java | 32 +++++--------
 .../impl/DefaultLoginsHealthCheck.java             | 37 ++++++---------
 .../hc/healthchecks/impl/HealthCheckInfo.java      | 42 -----------------
 .../healthchecks/impl/JmxAttributeHealthCheck.java | 43 ++++++------------
 .../healthchecks/impl/ScriptableHealthCheck.java   | 47 +++++++------------
 .../impl/SlingRequestStatusHealthCheck.java        | 53 +++++++++-------------
 6 files changed, 79 insertions(+), 175 deletions(-)

diff --git a/src/main/java/org/apache/sling/hc/healthchecks/impl/CompositeHealthCheck.java b/src/main/java/org/apache/sling/hc/healthchecks/impl/CompositeHealthCheck.java
index e459b0d..65f400f 100644
--- a/src/main/java/org/apache/sling/hc/healthchecks/impl/CompositeHealthCheck.java
+++ b/src/main/java/org/apache/sling/hc/healthchecks/impl/CompositeHealthCheck.java
@@ -19,7 +19,6 @@ package org.apache.sling.hc.healthchecks.impl;
 
 import java.util.Arrays;
 import java.util.List;
-import java.util.Map;
 
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
@@ -27,7 +26,6 @@ import org.apache.felix.scr.annotations.ConfigurationPolicy;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.commons.osgi.PropertiesUtil;
-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;
@@ -43,39 +41,36 @@ import org.slf4j.LoggerFactory;
  */
 @Component(
         name="org.apache.sling.hc.CompositeHealthCheck",
-        configurationFactory=true, 
-        policy=ConfigurationPolicy.REQUIRE, 
+        configurationFactory=true,
+        policy=ConfigurationPolicy.REQUIRE,
         metatype=true)
 @Service
 public class CompositeHealthCheck implements HealthCheck {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
-    private Map<String, String> info;
     private BundleContext bundleContext;
-    
+
     @Property(cardinality=50)
-    public static final String PROP_TAGS = Constants.HC_TAGS;
-    
+    public static final String PROP_TAGS = HealthCheck.TAGS;
+
     @Property(cardinality=50)
     public static final String PROP_FILTER_TAGS = "filter.tags";
     private String [] filterTags;
 
     @Property
-    public static final String PROP_MBEAN_NAME = Constants.HC_MBEAN_NAME;
-    
+    public static final String PROP_MBEAN_NAME = HealthCheck.MBEAN_NAME;
+
     @Activate
     public void activate(ComponentContext ctx) {
         bundleContext = ctx.getBundleContext();
-        info = new HealthCheckInfo(ctx.getProperties());
         filterTags = PropertiesUtil.toStringArray(ctx.getProperties().get(PROP_FILTER_TAGS), new String[] {});
-        info.put(PROP_FILTER_TAGS, Arrays.asList(filterTags).toString());
         log.info("Activated, will select HealthCheck having tags {}", Arrays.asList(filterTags));
     }
-    
+
     @Override
     public Result execute() {
         final FormattingResultLog resultLog = new FormattingResultLog();
-        final List<HealthCheck> checks = new HealthCheckFilter(bundleContext).getTaggedHealthCheck(filterTags);
+        final List<HealthCheck> checks = new HealthCheckFilter(bundleContext).getTaggedHealthChecks(filterTags);
         if(checks.size() == 0) {
             resultLog.warn("HealthCheckFilter returns no HealthCheck for tags {}", Arrays.asList(filterTags));
             return new Result(resultLog);
@@ -99,18 +94,13 @@ public class CompositeHealthCheck implements HealthCheck {
                 resultLog.add(e);
             }
         }
-        
+
         if(failures == 0) {
             resultLog.debug("{} HealthCheck executed, all ok", executed);
         } else {
             resultLog.warn("{} HealthCheck executed, {} failures", executed, failures);
         }
-        
-        return new Result(resultLog);
-    }
 
-    @Override
-    public Map<String, String> getInfo() {
-        return info;
+        return new Result(resultLog);
     }
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/hc/healthchecks/impl/DefaultLoginsHealthCheck.java b/src/main/java/org/apache/sling/hc/healthchecks/impl/DefaultLoginsHealthCheck.java
index d7196a9..781e76d 100644
--- a/src/main/java/org/apache/sling/hc/healthchecks/impl/DefaultLoginsHealthCheck.java
+++ b/src/main/java/org/apache/sling/hc/healthchecks/impl/DefaultLoginsHealthCheck.java
@@ -19,7 +19,6 @@ package org.apache.sling.hc.healthchecks.impl;
 
 import java.util.Arrays;
 import java.util.List;
-import java.util.Map;
 
 import javax.jcr.Credentials;
 import javax.jcr.RepositoryException;
@@ -33,7 +32,6 @@ 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.commons.osgi.PropertiesUtil;
-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.healthchecks.util.FormattingResultLog;
@@ -46,44 +44,42 @@ import org.slf4j.LoggerFactory;
  *  Used to verify that those logins are disabled on production systems */
 @Component(
         name="org.apache.sling.hc.DefaultLoginsHealthCheck",
-        configurationFactory=true, 
-        policy=ConfigurationPolicy.REQUIRE, 
+        configurationFactory=true,
+        policy=ConfigurationPolicy.REQUIRE,
         metatype=true)
 @Service
 public class DefaultLoginsHealthCheck implements HealthCheck {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
-    private Map<String, String> info;
-    
+
     @Property(cardinality=500)
     public static final String PROP_LOGINS = "logins";
     private List<String> logins;
-    
+
     @Property(cardinality=50)
-    public static final String PROP_TAGS = Constants.HC_TAGS;
-    
+    public static final String PROP_TAGS = HealthCheck.TAGS;
+
     @Property
-    public static final String PROP_NAME = Constants.HC_NAME;
-    
+    public static final String PROP_NAME = HealthCheck.NAME;
+
     @Property
-    public static final String PROP_MBEAN_NAME = Constants.HC_MBEAN_NAME;
-    
+    public static final String PROP_MBEAN_NAME = HealthCheck.MBEAN_NAME;
+
     @Reference
     private SlingRepository repository;
-    
+
     @Activate
     public void activate(ComponentContext ctx) {
-        info = new HealthCheckInfo(ctx.getProperties());
         logins = Arrays.asList(PropertiesUtil.toStringArray(ctx.getProperties().get(PROP_LOGINS), new String[] {}));
         log.info("Activated, logins={}", logins);
     }
-    
+
     @Override
     public Result execute() {
         final FormattingResultLog resultLog = new FormattingResultLog();
         int checked=0;
         int failures=0;
-        
+
         for(String login : logins) {
             final String [] parts = login.split(":");
             if(parts.length != 2) {
@@ -111,7 +107,7 @@ public class DefaultLoginsHealthCheck implements HealthCheck {
                 }
             }
         }
-        
+
         if(checked==0) {
             resultLog.warn("Did not check any logins, configured logins={}", logins);
         } else if(failures != 0){
@@ -121,9 +117,4 @@ public class DefaultLoginsHealthCheck implements HealthCheck {
         }
         return new Result(resultLog);
     }
-
-    @Override
-    public Map<String, String> getInfo() {
-        return info;
-    }
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/hc/healthchecks/impl/HealthCheckInfo.java b/src/main/java/org/apache/sling/hc/healthchecks/impl/HealthCheckInfo.java
deleted file mode 100644
index ac3dc61..0000000
--- a/src/main/java/org/apache/sling/hc/healthchecks/impl/HealthCheckInfo.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.healthchecks.impl;
-
-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
diff --git a/src/main/java/org/apache/sling/hc/healthchecks/impl/JmxAttributeHealthCheck.java b/src/main/java/org/apache/sling/hc/healthchecks/impl/JmxAttributeHealthCheck.java
index e18767d..193615d 100644
--- a/src/main/java/org/apache/sling/hc/healthchecks/impl/JmxAttributeHealthCheck.java
+++ b/src/main/java/org/apache/sling/hc/healthchecks/impl/JmxAttributeHealthCheck.java
@@ -18,7 +18,6 @@
 package org.apache.sling.hc.healthchecks.impl;
 
 import java.lang.management.ManagementFactory;
-import java.util.Map;
 
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
@@ -29,7 +28,6 @@ import org.apache.felix.scr.annotations.ConfigurationPolicy;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.commons.osgi.PropertiesUtil;
-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.healthchecks.util.FormattingResultLog;
@@ -41,51 +39,45 @@ import org.slf4j.LoggerFactory;
 /** {@link HealthCheck} that checks a single JMX attribute */
 @Component(
         name="org.apache.sling.hc.JmxAttributeHealthCheck",
-        configurationFactory=true, 
-        policy=ConfigurationPolicy.REQUIRE, 
+        configurationFactory=true,
+        policy=ConfigurationPolicy.REQUIRE,
         metatype=true)
 @Service
 public class JmxAttributeHealthCheck implements HealthCheck {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
-    private Map<String, String> info;
     private String mbeanName;
     private String attributeName;
     private String constraint;
 
     @Property
     public static final String PROP_OBJECT_NAME = "mbean.name";
-    
+
     @Property
     public static final String PROP_ATTRIBUTE_NAME = "attribute.name";
-    
+
     @Property
     public static final String PROP_CONSTRAINT = "attribute.value.constraint";
-    
+
     @Property(cardinality=50)
-    public static final String PROP_TAGS = Constants.HC_TAGS;
-    
+    public static final String PROP_TAGS = HealthCheck.TAGS;
+
     @Property
-    public static final String PROP_NAME = Constants.HC_NAME;
-    
+    public static final String PROP_NAME = HealthCheck.NAME;
+
     @Property
-    public static final String PROP_MBEAN_NAME = Constants.HC_MBEAN_NAME;
-    
+    public static final String PROP_MBEAN_NAME = HealthCheck.MBEAN_NAME;
+
     @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), "");
-        
-        info.put(PROP_OBJECT_NAME, mbeanName);
-        info.put(PROP_ATTRIBUTE_NAME, attributeName);
-        info.put(PROP_CONSTRAINT, constraint);
-        
-        log.info("Activated with HealthCheck name={}, objectName={}, attribute={}, constraint={}", 
-                new Object[] { info.get(Constants.HC_NAME), mbeanName, attributeName, constraint });
+
+        log.info("Activated with HealthCheck name={}, objectName={}, attribute={}, constraint={}",
+                new Object[] { ctx.getProperties().get(HealthCheck.NAME), mbeanName, attributeName, constraint });
     }
-    
+
     @Override
     public Result execute() {
         final FormattingResultLog resultLog = new FormattingResultLog();
@@ -106,9 +98,4 @@ public class JmxAttributeHealthCheck implements HealthCheck {
         }
         return new Result(resultLog);
     }
-
-    @Override
-    public Map<String, String> getInfo() {
-        return info;
-    }
 }
diff --git a/src/main/java/org/apache/sling/hc/healthchecks/impl/ScriptableHealthCheck.java b/src/main/java/org/apache/sling/hc/healthchecks/impl/ScriptableHealthCheck.java
index 5979baa..1f0ba8b 100644
--- a/src/main/java/org/apache/sling/hc/healthchecks/impl/ScriptableHealthCheck.java
+++ b/src/main/java/org/apache/sling/hc/healthchecks/impl/ScriptableHealthCheck.java
@@ -16,8 +16,6 @@
  * specific language governing permissions and limitations under the License.
  */
 package org.apache.sling.hc.healthchecks.impl;
-import java.util.Map;
-
 import javax.script.Bindings;
 import javax.script.ScriptEngine;
 import javax.script.ScriptEngineManager;
@@ -29,7 +27,6 @@ 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.commons.osgi.PropertiesUtil;
-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.healthchecks.util.FormattingResultLog;
@@ -41,51 +38,46 @@ import org.slf4j.LoggerFactory;
 /** {@link HealthCheck} that checks a scriptable expression */
 @Component(
         name="org.apache.sling.hc.ScriptableHealthCheck",
-        configurationFactory=true, 
-        policy=ConfigurationPolicy.REQUIRE, 
+        configurationFactory=true,
+        policy=ConfigurationPolicy.REQUIRE,
         metatype=true)
 @Service
 public class ScriptableHealthCheck implements HealthCheck {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
-    private Map<String, String> info;
     private String expression;
     private String languageExtension;
     private BundleContext bundleContext;
-    
+
     public static final String DEFAULT_LANGUAGE_EXTENSION = "ecma";
 
     @Property
     public static final String PROP_EXPRESSION = "expression";
-    
+
     @Property
     public static final String PROP_LANGUAGE_EXTENSION = "language.extension";
-    
+
     @Property(cardinality=50)
-    public static final String PROP_TAGS = Constants.HC_TAGS;
-    
+    public static final String PROP_TAGS = HealthCheck.TAGS;
+
     @Property
-    public static final String PROP_NAME = Constants.HC_NAME;
-    
+    public static final String PROP_NAME = HealthCheck.NAME;
+
     @Property
-    public static final String PROP_MBEAN_NAME = Constants.HC_MBEAN_NAME;
-    
+    public static final String PROP_MBEAN_NAME = HealthCheck.MBEAN_NAME;
+
     @Reference
     private ScriptEngineManager scriptEngineManager;
-    
+
     @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);
-        
+
         log.info("Activated, name={}, languageExtension={}, expression={}", languageExtension, expression);
     }
-    
+
     @Override
     public Result execute() {
         final FormattingResultLog resultLog = new FormattingResultLog();
@@ -103,19 +95,14 @@ public class ScriptableHealthCheck implements HealthCheck {
                 if(value!=null && "true".equals(value.toString())) {
                     resultLog.debug("Expression [{}] evaluates to true as expected", expression);
                 } else {
-                    resultLog.warn("Expression [{}] does not evaluate to true as expected, value=[{}]", expression, value); 
+                    resultLog.warn("Expression [{}] does not evaluate to true as expected, value=[{}]", expression, value);
                 }
             }
         } catch(Exception e) {
             resultLog.healthCheckError(
-                    "Exception while evaluating expression [{}] with language extension [{}]: {}", 
-                    expression, languageExtension, e); 
+                    "Exception while evaluating expression [{}] with language extension [{}]: {}",
+                    expression, languageExtension, e);
         }
         return new Result(resultLog);
     }
-
-    @Override
-    public Map<String, String> getInfo() {
-        return info;
-    }
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/hc/healthchecks/impl/SlingRequestStatusHealthCheck.java b/src/main/java/org/apache/sling/hc/healthchecks/impl/SlingRequestStatusHealthCheck.java
index c2ba539..ab22c8e 100644
--- a/src/main/java/org/apache/sling/hc/healthchecks/impl/SlingRequestStatusHealthCheck.java
+++ b/src/main/java/org/apache/sling/hc/healthchecks/impl/SlingRequestStatusHealthCheck.java
@@ -18,7 +18,6 @@
 package org.apache.sling.hc.healthchecks.impl;
 
 import java.util.Arrays;
-import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -32,7 +31,6 @@ import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.engine.SlingRequestProcessor;
-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.healthchecks.util.FormattingResultLog;
@@ -43,24 +41,23 @@ import org.slf4j.LoggerFactory;
 /** {@link HealthCheck} that checks the HTTP status of Sling requests */
 @Component(
         name="org.apache.sling.hc.SlingRequestStatusHealthCheck",
-        configurationFactory=true, 
-        policy=ConfigurationPolicy.REQUIRE, 
+        configurationFactory=true,
+        policy=ConfigurationPolicy.REQUIRE,
         metatype=true)
 @Service
 public class SlingRequestStatusHealthCheck implements HealthCheck {
 
     private static final Logger log = LoggerFactory.getLogger(SlingRequestStatusHealthCheck.class);
-    private Map<String, String> info;
     private String [] paths;
-    
+
     static class PathSpec {
         int status;
         String path;
-        
+
         PathSpec(String configuredPath, FormattingResultLog resultLog) {
             path = configuredPath;
             status = 200;
-            
+
             final String [] parts  = configuredPath.split(":");
             if(parts.length == 2) {
                 try {
@@ -69,44 +66,43 @@ public class SlingRequestStatusHealthCheck implements HealthCheck {
                 } catch(NumberFormatException nfe) {
                     resultLog.healthCheckError("NumberFormatException while parsing [{}], invalid status value?", configuredPath);
                 }
-            } 
+            }
         }
     }
-    
+
     @Property(cardinality=Integer.MAX_VALUE)
     public static final String PROP_PATH = "path";
-    
+
     @Property(cardinality=50)
-    public static final String PROP_TAGS = Constants.HC_TAGS;
-    
+    public static final String PROP_TAGS = HealthCheck.TAGS;
+
     @Property
-    public static final String PROP_NAME = Constants.HC_NAME;
-    
+    public static final String PROP_NAME = HealthCheck.NAME;
+
     @Property
-    public static final String PROP_MBEAN_NAME = Constants.HC_MBEAN_NAME;
-    
+    public static final String PROP_MBEAN_NAME = HealthCheck.MBEAN_NAME;
+
     @Reference
     private SlingRequestProcessor requestProcessor;
-    
+
     @Reference
-    private ResourceResolverFactory resolverFactory;  
-    
+    private ResourceResolverFactory resolverFactory;
+
     @Activate
     public void activate(ComponentContext ctx) {
-        info = new HealthCheckInfo(ctx.getProperties());
         paths = PropertiesUtil.toStringArray(ctx.getProperties().get(PROP_PATH), new String [] {});
         log.info("Activated, paths={}", Arrays.asList(paths));
     }
-    
+
     @Override
     public Result execute() {
         final FormattingResultLog resultLog = new FormattingResultLog();
-        
+
         ResourceResolver resolver = null;
         int checked = 0;
         int failed = 0;
         String lastPath = null;
-        
+
         try {
             resolver = resolverFactory.getAdministrativeResourceResolver(null);
             for(String p : paths) {
@@ -131,18 +127,13 @@ public class SlingRequestStatusHealthCheck implements HealthCheck {
                 resolver.close();
             }
         }
-        
+
         if(checked == 0) {
             resultLog.warn("No paths checked, empty paths list?");
         } else {
             resultLog.debug("{} paths checked, {} failures", checked, failed);
         }
-        
-        return new Result(resultLog);
-    }
 
-    @Override
-    public Map<String, String> getInfo() {
-        return info;
+        return new Result(resultLog);
     }
 }
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.