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>.