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 <[email protected]> AuthorDate: Mon Aug 19 06:21:19 2013 +0000 SLING-3021 : Use service properties for HC meta data and improve JMX registration git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/healthcheck/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 "[email protected]" <[email protected]>.
