modules/plugins/jboss-as/src/main/java/org/rhq/plugins/jbossas/WarComponent.java | 60 +++++++++- 1 file changed, 58 insertions(+), 2 deletions(-)
New commits: commit 1239025ef5e2402572e586947f0be0e706f1469a Author: Heiko W. Rupp hwr@redhat.com Date: Thu Nov 25 13:37:02 2010 +0100
BZ 657302 - read stats from the ClusterManager if needed
diff --git a/modules/plugins/jboss-as/src/main/java/org/rhq/plugins/jbossas/WarComponent.java b/modules/plugins/jboss-as/src/main/java/org/rhq/plugins/jbossas/WarComponent.java index 45fd5da..b3d218c 100644 --- a/modules/plugins/jboss-as/src/main/java/org/rhq/plugins/jbossas/WarComponent.java +++ b/modules/plugins/jboss-as/src/main/java/org/rhq/plugins/jbossas/WarComponent.java @@ -24,9 +24,13 @@ package org.rhq.plugins.jbossas;
import java.io.File; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.Set;
import org.apache.commons.logging.Log; @@ -83,6 +87,9 @@ public class WarComponent extends ApplicationComponent implements OperationFacet private static final String SERVLET_NAME_BASE_TEMPLATE = "jboss.web:J2EEApplication=none,J2EEServer=none,j2eeType=Servlet,name=%name%";
private static final String SESSION_NAME_BASE_TEMPLATE = "jboss.web:host=%HOST%,type=Manager,path=%PATH%"; + + // WebModule=//localhost/test-simple,service=ClusterManager + private static final String CLUSTER_SESSION_NAME_BASE_TEMPLATE = "jboss.web:service=ClusterManager,WebModule=//%HOST%%PATH%"; private static final String SESSION_PREFIX = "Session."; private static final String VHOST_PREFIX = "Vhost"; public static final String VHOST_CONFIG_PROP = "vHost"; @@ -95,6 +102,20 @@ public class WarComponent extends ApplicationComponent implements OperationFacet private ResponseTimeLogParser logParser; String vhost; private String contextRoot; + // Mapping non-clustered names -> attribute name in the cluster manager + private final String[] CLUSTER_SESSION_ATTRIBUTE_NAMES = { + "maxInactiveInterval","MaxInactiveInterval", + "activeSessions","ActiveSessionCount", + "sessionCounter","CreatedSessionCount", + "sessionAverageAliveTime","", + "processingTime","ProcessingTime", + "maxActive","MaxActiveSessionCount", + "maxActiveSessions","MaxActiveAllowed", + "expiredSessions","ExpiredSessionCount", + "rejectedSessions","RejectedSessionCount", + "sessionIdLength","SessionIdLength" + }; +
@Override public AvailabilityType getAvailability() { @@ -135,6 +156,7 @@ public class WarComponent extends ApplicationComponent implements OperationFacet this.logParser.setExcludes(responseTimeConfig.getExcludes()); this.logParser.setTransforms(responseTimeConfig.getTransforms()); } + }
@Override @@ -190,6 +212,8 @@ public class WarComponent extends ApplicationComponent implements OperationFacet }
private Double getSessionMetric(String metricName) { + boolean isClustered = false; + EmsConnection jmxConnection = getEmsConnection(); String servletMBeanNames = SESSION_NAME_BASE_TEMPLATE.replace("%PATH%", WarDiscoveryHelper.getContextPath(this.contextRoot)); @@ -197,6 +221,18 @@ public class WarComponent extends ApplicationComponent implements OperationFacet ObjectNameQueryUtility queryUtility = new ObjectNameQueryUtility(servletMBeanNames); List<EmsBean> mBeans = jmxConnection.queryBeans(queryUtility.getTranslatedQuery());
+ if (mBeans.size()==0) { + // retry with the cluster manager TODO select the local vs cluster mode on discovery + servletMBeanNames = CLUSTER_SESSION_NAME_BASE_TEMPLATE.replace("%PATH%", + WarDiscoveryHelper.getContextPath(this.contextRoot)); + servletMBeanNames = servletMBeanNames.replace("%HOST%", vhost); + queryUtility = new ObjectNameQueryUtility(servletMBeanNames); + mBeans = jmxConnection.queryBeans(queryUtility.getTranslatedQuery()); + if (mBeans.size()>0) + isClustered = true; + + } + String property = metricName.substring(SESSION_PREFIX.length());
Double ret = Double.NaN; @@ -204,16 +240,36 @@ public class WarComponent extends ApplicationComponent implements OperationFacet if (mBeans.size() > 0) { // TODO flag error if != 1 ? EmsBean eBean = mBeans.get(0); eBean.refreshAttributes(); + + if (isClustered) { + property = lookupClusteredAttributeName(property); + } + EmsAttribute att = eBean.getAttribute(property); if (att != null) { - Integer i = (Integer) att.getValue(); - ret = Double.valueOf(i); + Object o = att.getValue(); + if (o instanceof Long) { + Long l = (Long) o; + ret = Double.valueOf(l); + } + else { + Integer i = (Integer) o; + ret = Double.valueOf(i); + } }
} return ret; }
+ private String lookupClusteredAttributeName(String property) { + for (int i = 0; i < CLUSTER_SESSION_ATTRIBUTE_NAMES.length ; i+=2) { + if (CLUSTER_SESSION_ATTRIBUTE_NAMES[i].equals(property)) + return CLUSTER_SESSION_ATTRIBUTE_NAMES[i+1]; + } + return property; + } + private Double getServletMetric(String metricName) {
EmsConnection jmxConnection = getEmsConnection();
rhq-commits@lists.fedorahosted.org