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/06/06 15:48:55 UTC
svn commit: r1490286 - in /sling/trunk/contrib/extensions/healthcheck:
hc-rules/src/main/java/org/apache/sling/hc/rules/osgi/BundlesRuleBuilder.java
sling-demo/src/main/resources/SLING-CONTENT/apps/hc/demo/inactive-bundles.json
Author: bdelacretaz
Date: Thu Jun 6 13:48:55 2013
New Revision: 1490286
URL: http://svn.apache.org/r1490286
Log:
SLING-2822 - add inactive bundles count rule
Added:
sling/trunk/contrib/extensions/healthcheck/sling-demo/src/main/resources/SLING-CONTENT/apps/hc/demo/inactive-bundles.json (with props)
Modified:
sling/trunk/contrib/extensions/healthcheck/hc-rules/src/main/java/org/apache/sling/hc/rules/osgi/BundlesRuleBuilder.java
Modified: sling/trunk/contrib/extensions/healthcheck/hc-rules/src/main/java/org/apache/sling/hc/rules/osgi/BundlesRuleBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/hc-rules/src/main/java/org/apache/sling/hc/rules/osgi/BundlesRuleBuilder.java?rev=1490286&r1=1490285&r2=1490286&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/hc-rules/src/main/java/org/apache/sling/hc/rules/osgi/BundlesRuleBuilder.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/hc-rules/src/main/java/org/apache/sling/hc/rules/osgi/BundlesRuleBuilder.java Thu Jun 6 13:48:55 2013
@@ -22,6 +22,7 @@ import org.apache.sling.hc.api.RuleBuild
import org.apache.sling.hc.api.SystemAttribute;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
import org.slf4j.Logger;
/** RuleBuilder about OSGi bundles */
@@ -29,34 +30,77 @@ public class BundlesRuleBuilder implemen
public static final String NAMESPACE = "osgi";
public static final String BUNDLE_STATE_RULE = "bundle.state";
- private final BundleContext bundleContext;
+ public static final String BUNDLES_INACTIVE_RULE = "inactive.bundles.count";
+ private final BundleContext ctx;
- static class BundleAttribute implements SystemAttribute {
- private final SystemAttribute attr;
+ class BundleStateAttribute implements SystemAttribute {
private final String name;
+ private final String qualifier;
+ private final BundleContext ctx;
- BundleAttribute(String name, SystemAttribute attr) {
+ BundleStateAttribute(BundleContext ctx, String name, String qualifier) {
+ this.ctx = ctx;
this.name = name;
- this.attr = attr;
+ this.qualifier = qualifier;
}
@Override
public String toString() {
- return name;
+ return name + ":" + qualifier;
}
@Override
public Object getValue(Logger logger) {
- return attr.getValue(logger);
+ String result = null;
+ Bundle b = findBundle(ctx, qualifier);
+ if(b == null) {
+ logger.error("Bundle not found: {}", qualifier);
+ } else {
+ result = bundleStateToString(b.getState());
+ logger.debug("Bundle {} found, state={} ({})",
+ new Object[] { b.getSymbolicName(), result, b.getState()});
+ }
+ return result;
+ }
+ }
+
+ static class InactiveBundlesCount implements SystemAttribute {
+ private final BundleContext ctx;
+
+ InactiveBundlesCount(BundleContext ctx) {
+ this.ctx = ctx;
+ }
+
+ @Override
+ public String toString() {
+ return getClass().getSimpleName();
+ }
+
+ @Override
+ public Object getValue(Logger logger) {
+ int inactiveCount=0;
+ for(Bundle b : ctx.getBundles()) {
+ if(!isFragment(b) && Bundle.ACTIVE != b.getState()) {
+ inactiveCount++;
+ logger.debug("Bundle {} is not active, state={} ({})",
+ new Object[] { b.getSymbolicName(), b.getState(), bundleStateToString(b.getState())});
+ }
+ }
+
+ if(inactiveCount > 0) {
+ logger.debug("{} bundles found inactive", inactiveCount);
+ }
+
+ return inactiveCount;
}
}
BundlesRuleBuilder(BundleContext ctx) {
- bundleContext = ctx;
+ this.ctx = ctx;
}
- private Bundle findBundle(String symbolicName) {
- for(Bundle b : bundleContext.getBundles()) {
+ private static Bundle findBundle(BundleContext ctx, String symbolicName) {
+ for(Bundle b : ctx.getBundles()) {
if(symbolicName.equals(b.getSymbolicName())) {
return b;
}
@@ -64,7 +108,7 @@ public class BundlesRuleBuilder implemen
return null;
}
- private String bundleStateToString(int state) {
+ private static String bundleStateToString(int state) {
// TODO this must exist somewhere already...
if(state == Bundle.ACTIVE) {
return "active";
@@ -81,35 +125,21 @@ public class BundlesRuleBuilder implemen
}
}
+ private static boolean isFragment(Bundle b) {
+ final String header = (String) b.getHeaders().get( Constants.FRAGMENT_HOST );
+ return header!= null && header.trim().length() > 0;
+ }
+
@Override
public Rule buildRule(String namespace, String ruleName, final String qualifier, String expression) {
if(!NAMESPACE.equals(namespace)) {
return null;
}
- SystemAttribute attr = null;
-
if(BUNDLE_STATE_RULE.equals(ruleName) && qualifier != null) {
- // Get the state of a bundle
- attr = new BundleAttribute(ruleName + ":" + qualifier, new SystemAttribute() {
- @Override
- public Object getValue(Logger logger) {
- String result = null;
- Bundle b = findBundle(qualifier);
- if(b == null) {
- logger.error("Bundle not found: {}", qualifier);
- } else {
- result = bundleStateToString(b.getState());
- logger.debug("Bundle {} found, state={} ({})",
- new Object[] { b.getSymbolicName(), result, b.getState()});
- }
- return result;
- }
- });
- }
-
- if(attr != null) {
- return new Rule(attr, expression);
+ return new Rule(new BundleStateAttribute(ctx, ruleName,qualifier), expression);
+ } else if(BUNDLES_INACTIVE_RULE.equals(ruleName)) {
+ return new Rule(new InactiveBundlesCount(ctx), expression);
}
return null;
Added: sling/trunk/contrib/extensions/healthcheck/sling-demo/src/main/resources/SLING-CONTENT/apps/hc/demo/inactive-bundles.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/sling-demo/src/main/resources/SLING-CONTENT/apps/hc/demo/inactive-bundles.json?rev=1490286&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/sling-demo/src/main/resources/SLING-CONTENT/apps/hc/demo/inactive-bundles.json (added)
+++ sling/trunk/contrib/extensions/healthcheck/sling-demo/src/main/resources/SLING-CONTENT/apps/hc/demo/inactive-bundles.json Thu Jun 6 13:48:55 2013
@@ -0,0 +1,12 @@
+{
+ "expression": "<= 3",
+ "ruleName": "inactive.bundles.count",
+ "sling:resourceType": "sling/healthcheck/rules",
+ "namespace": "osgi",
+ "tags": [
+ "bundles",
+ "osgi",
+ "sling"
+ ],
+ "jcr:primaryType": "nt:unstructured"
+}
\ No newline at end of file
Propchange: sling/trunk/contrib/extensions/healthcheck/sling-demo/src/main/resources/SLING-CONTENT/apps/hc/demo/inactive-bundles.json
------------------------------------------------------------------------------
svn:executable = *