[jboss-cvs] JBossAS SVN: r111325 - in projects/jboss-jca/trunk/rhq/src: main/java/org/jboss/jca/rhq/ds and 2 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue May 10 02:29:54 EDT 2011
Author: gaol
Date: 2011-05-10 02:29:53 -0400 (Tue, 10 May 2011)
New Revision: 111325
Modified:
projects/jboss-jca/trunk/rhq/src/main/java/org/jboss/jca/rhq/core/PoolResourceComponent.java
projects/jboss-jca/trunk/rhq/src/main/java/org/jboss/jca/rhq/ds/DsResourceComponent.java
projects/jboss-jca/trunk/rhq/src/main/resources/META-INF/rhq-plugin.xml
projects/jboss-jca/trunk/rhq/src/test/java/org/jboss/jca/rhq/test/DsTestCase.java
Log:
[JBJCA-568] Adds metrics support for RHQ plugin
Modified: projects/jboss-jca/trunk/rhq/src/main/java/org/jboss/jca/rhq/core/PoolResourceComponent.java
===================================================================
--- projects/jboss-jca/trunk/rhq/src/main/java/org/jboss/jca/rhq/core/PoolResourceComponent.java 2011-05-10 01:50:52 UTC (rev 111324)
+++ projects/jboss-jca/trunk/rhq/src/main/java/org/jboss/jca/rhq/core/PoolResourceComponent.java 2011-05-10 06:29:53 UTC (rev 111325)
@@ -24,9 +24,18 @@
import org.jboss.jca.core.api.connectionmanager.pool.Pool;
import org.jboss.jca.core.api.connectionmanager.pool.PoolConfiguration;
+import org.jboss.jca.core.api.connectionmanager.pool.PoolStatistics;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PropertySimple;
+import org.rhq.core.domain.measurement.DataType;
+import org.rhq.core.domain.measurement.MeasurementDataNumeric;
+import org.rhq.core.domain.measurement.MeasurementReport;
+import org.rhq.core.domain.measurement.MeasurementScheduleRequest;
import org.rhq.core.pluginapi.operation.OperationResult;
/**
@@ -183,4 +192,50 @@
*/
protected abstract Pool getPool();
+ /**
+ * Available PoolStatistics names
+ */
+ private static final List<String> poolStatisticsNames = new ArrayList<String>();
+ static
+ {
+ poolStatisticsNames.add("ActiveCount");
+ poolStatisticsNames.add("AvailableCount");
+ poolStatisticsNames.add("AverageBlockingTime");
+ poolStatisticsNames.add("AverageCreationTime");
+ poolStatisticsNames.add("CreatedCount");
+ poolStatisticsNames.add("DestroyedCount");
+ poolStatisticsNames.add("MaxCreationTime");
+ poolStatisticsNames.add("MaxUsedCount");
+ poolStatisticsNames.add("MaxWaitCount");
+ poolStatisticsNames.add("MaxWaitTime");
+ poolStatisticsNames.add("TimedOut");
+ poolStatisticsNames.add("TotalBlockingTime");
+ poolStatisticsNames.add("TotalCreationTime");
+ }
+
+ /**
+ * Gets values for MeasurementReport
+ *
+ * @param measurementReport the MeasurementReport
+ * @param measurementScheduleRequests the requests
+ * @throws Exception the exception
+ */
+ @Override
+ public void getValues(MeasurementReport measurementReport,
+ Set<MeasurementScheduleRequest> measurementScheduleRequests) throws Exception
+ {
+ Pool pool = getPool();
+ PoolStatistics poolStatistics = pool.getStatistics();
+ for (MeasurementScheduleRequest request : measurementScheduleRequests)
+ {
+ String reqName = request.getName();
+ if (request.getDataType().equals(DataType.MEASUREMENT) && poolStatisticsNames.contains(reqName))
+ {
+ Double value = Double.valueOf(poolStatistics.getValue(reqName).toString());
+ MeasurementDataNumeric poolStatisMetrics = new MeasurementDataNumeric(request, value);
+ measurementReport.addData(poolStatisMetrics);
+ }
+ }
+ }
+
}
Modified: projects/jboss-jca/trunk/rhq/src/main/java/org/jboss/jca/rhq/ds/DsResourceComponent.java
===================================================================
--- projects/jboss-jca/trunk/rhq/src/main/java/org/jboss/jca/rhq/ds/DsResourceComponent.java 2011-05-10 01:50:52 UTC (rev 111324)
+++ projects/jboss-jca/trunk/rhq/src/main/java/org/jboss/jca/rhq/ds/DsResourceComponent.java 2011-05-10 06:29:53 UTC (rev 111325)
@@ -25,15 +25,24 @@
import org.jboss.jca.core.api.connectionmanager.pool.PoolConfiguration;
import org.jboss.jca.core.api.management.DataSource;
import org.jboss.jca.core.api.management.ManagementRepository;
+import org.jboss.jca.core.spi.statistics.StatisticsPlugin;
import org.jboss.jca.rhq.core.ManagementRepositoryManager;
import org.jboss.jca.rhq.core.PoolResourceComponent;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
import org.jboss.logging.Logger;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.ConfigurationUpdateStatus;
import org.rhq.core.domain.configuration.PropertySimple;
+import org.rhq.core.domain.measurement.DataType;
+import org.rhq.core.domain.measurement.MeasurementDataNumeric;
+import org.rhq.core.domain.measurement.MeasurementReport;
+import org.rhq.core.domain.measurement.MeasurementScheduleRequest;
import org.rhq.core.pluginapi.configuration.ConfigurationUpdateReport;
/**
@@ -136,4 +145,46 @@
return ds.getPool();
}
+ /**
+ * Available DataSource Statistics names
+ */
+ private static final List<String> dsStatisticsNames = new ArrayList<String>();
+ static
+ {
+ dsStatisticsNames.add("PreparedStatementCacheAccessCount");
+ dsStatisticsNames.add("PreparedStatementCacheAddCount");
+ dsStatisticsNames.add("PreparedStatementCacheCurrentSize");
+ dsStatisticsNames.add("PreparedStatementCacheDeleteCount");
+ dsStatisticsNames.add("PreparedStatementCacheHitCount");
+ dsStatisticsNames.add("PreparedStatementCacheMissCount");
+ }
+
+
+ /**
+ * Gets values for MeasurementReport
+ *
+ * @param measurementReport the MeasurementReport
+ * @param measurementScheduleRequests the requests
+ * @throws Exception the exception
+ */
+ @Override
+ public void getValues(MeasurementReport measurementReport,
+ Set<MeasurementScheduleRequest> measurementScheduleRequests) throws Exception
+ {
+ // super for PoolStatistics
+ super.getValues(measurementReport, measurementScheduleRequests);
+ DataSource ds = getDataSource();
+ StatisticsPlugin statistics = ds.getStatistics();
+ for (MeasurementScheduleRequest request : measurementScheduleRequests)
+ {
+ String reqName = request.getName();
+ if (request.getDataType().equals(DataType.MEASUREMENT) && dsStatisticsNames.contains(reqName))
+ {
+ Double value = Double.valueOf(statistics.getValue(reqName).toString());
+ MeasurementDataNumeric dsStatisMetrics = new MeasurementDataNumeric(request, value);
+ measurementReport.addData(dsStatisMetrics);
+ }
+ }
+ }
+
}
Modified: projects/jboss-jca/trunk/rhq/src/main/resources/META-INF/rhq-plugin.xml
===================================================================
--- projects/jboss-jca/trunk/rhq/src/main/resources/META-INF/rhq-plugin.xml 2011-05-10 01:50:52 UTC (rev 111324)
+++ projects/jboss-jca/trunk/rhq/src/main/resources/META-INF/rhq-plugin.xml 2011-05-10 06:29:53 UTC (rev 111325)
@@ -294,7 +294,48 @@
<!-- Metrics -->
+<!ENTITY poolStatisticsMetrics '
+ <metric property="ActiveCount" measurementType="dynamic" displayType="summary" defaultOn="true" defaultInterval="600000"
+ dataType="measurement" category="performance" description="The active count"/>
+ <metric property="AvailableCount" measurementType="dynamic" displayType="summary" defaultOn="true" defaultInterval="600000"
+ dataType="measurement" category="performance" description="The available count"/>
+
+ <metric property="AverageBlockingTime" measurementType="dynamic" displayType="summary" defaultOn="true" defaultInterval="600000"
+ dataType="measurement" category="performance" description="The average time spent blocking on a connection"/>
+
+ <metric property="AverageCreationTime" measurementType="dynamic" displayType="summary" defaultOn="true" defaultInterval="600000"
+ dataType="measurement" category="performance" description="The average time spent on creating a physical connection"/>
+
+ <metric property="CreatedCount" measurementType="dynamic" displayType="summary" defaultOn="true" defaultInterval="600000"
+ dataType="measurement" category="performance" description="The created count"/>
+
+ <metric property="DestroyedCount" measurementType="dynamic" displayType="summary" defaultOn="true" defaultInterval="600000"
+ dataType="measurement" category="performance" description="The destroyed count"/>
+
+ <metric property="MaxCreationTime" measurementType="dynamic" displayType="summary" defaultOn="true" defaultInterval="600000"
+ dataType="measurement" category="performance" description="The maximum time spent on creating a physical connection"/>
+
+ <metric property="MaxUsedCount" measurementType="dynamic" displayType="summary" defaultOn="true" defaultInterval="600000"
+ dataType="measurement" category="performance" description="The maximum number of connections used"/>
+
+ <metric property="MaxWaitCount" measurementType="dynamic" displayType="summary" defaultOn="true" defaultInterval="600000"
+ dataType="measurement" category="performance" description="The maximum number of threads waiting for a connection"/>
+
+ <metric property="MaxWaitTime" measurementType="dynamic" displayType="summary" defaultOn="true" defaultInterval="600000"
+ dataType="measurement" category="performance" description="The maximum time waiting for a connection"/>
+
+ <metric property="TimedOut" measurementType="dynamic" displayType="summary" defaultOn="true" defaultInterval="600000"
+ dataType="measurement" category="performance" description="The timed out connections"/>
+
+ <metric property="TotalBlockingTime" measurementType="dynamic" displayType="summary" defaultOn="true" defaultInterval="600000"
+ dataType="measurement" category="performance" description="The total time spent blocking for connections"/>
+
+ <metric property="TotalCreationTime" measurementType="dynamic" displayType="summary" defaultOn="true" defaultInterval="600000"
+ dataType="measurement" category="performance" description="The total time spent creating physical connections"/>
+
+'>
+
<!-- Operations -->
<!ENTITY datasourceAndConnectionFactoryOperations '
@@ -412,6 +453,8 @@
class="org.jboss.jca.rhq.ra.CfResourceComponent">
&datasourceAndConnectionFactoryOperations;
+
+ &poolStatisticsMetrics;
<resource-configuration>
<c:group name="general" displayName="General">
@@ -501,6 +544,26 @@
&datasourceAndConnectionFactoryOperations;
+ &poolStatisticsMetrics;
+
+ <metric property="PreparedStatementCacheAccessCount" measurementType="dynamic" displayType="summary" defaultOn="true" defaultInterval="600000"
+ dataType="measurement" category="performance" description="The number of times that the statement cache was accessed"/>
+
+ <metric property="PreparedStatementCacheAddCount" measurementType="dynamic" displayType="summary" defaultOn="true" defaultInterval="600000"
+ dataType="measurement" category="performance" description="The number of statements added to the statement cache"/>
+
+ <metric property="PreparedStatementCacheCurrentSize" measurementType="dynamic" displayType="summary" defaultOn="true" defaultInterval="600000"
+ dataType="measurement" category="performance" description="The number of prepared and callable statements currently cached in the statement cache"/>
+
+ <metric property="PreparedStatementCacheDeleteCount" measurementType="dynamic" displayType="summary" defaultOn="true" defaultInterval="600000"
+ dataType="measurement" category="performance" description="The number of statements discarded from the cache"/>
+
+ <metric property="PreparedStatementCacheHitCount" measurementType="dynamic" displayType="summary" defaultOn="true" defaultInterval="600000"
+ dataType="measurement" category="performance" description="The number of times that statements from the cache were used"/>
+
+ <metric property="PreparedStatementCacheMissCount" measurementType="dynamic" displayType="summary" defaultOn="true" defaultInterval="600000"
+ dataType="measurement" category="performance" description="The number of times that a statement request could not be satisfied with a statement from the cache"/>
+
<content name="ds-file" displayName="DataSource File" category="deployable" isCreationType="true">
<configuration>
<c:simple-property name="override" displayName="Override?" required="false" type="boolean" defaultValue="true"/>
Modified: projects/jboss-jca/trunk/rhq/src/test/java/org/jboss/jca/rhq/test/DsTestCase.java
===================================================================
--- projects/jboss-jca/trunk/rhq/src/test/java/org/jboss/jca/rhq/test/DsTestCase.java 2011-05-10 01:50:52 UTC (rev 111324)
+++ projects/jboss-jca/trunk/rhq/src/test/java/org/jboss/jca/rhq/test/DsTestCase.java 2011-05-10 06:29:53 UTC (rev 111325)
@@ -32,7 +32,10 @@
import java.io.File;
import java.net.URL;
import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import javax.naming.InitialContext;
@@ -43,6 +46,10 @@
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PropertySimple;
+import org.rhq.core.domain.measurement.DataType;
+import org.rhq.core.domain.measurement.MeasurementDataNumeric;
+import org.rhq.core.domain.measurement.MeasurementReport;
+import org.rhq.core.domain.measurement.MeasurementScheduleRequest;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.pc.PluginContainer;
import org.rhq.core.pc.PluginContainerConfiguration;
@@ -51,6 +58,7 @@
import org.rhq.core.pc.plugin.FileSystemPluginFinder;
import org.rhq.core.pluginapi.configuration.ConfigurationFacet;
import org.rhq.core.pluginapi.configuration.ConfigurationUpdateReport;
+import org.rhq.core.pluginapi.measurement.MeasurementFacet;
import org.rhq.core.pluginapi.operation.OperationFacet;
import org.rhq.core.pluginapi.operation.OperationResult;
@@ -288,6 +296,50 @@
/**
+ * Tests DataSource metrics
+ *
+ * @throws Throwable the exception
+ */
+ @Test
+ public void testDsMetrics() throws Throwable
+ {
+ PluginContainer pc = PluginContainer.getInstance();
+ InventoryManager im = pc.getInventoryManager();
+ MeasurementFacet facet = (MeasurementFacet)im.getResourceComponent(rarServiceResource);
+ MeasurementReport report = new MeasurementReport();
+ Set<MeasurementScheduleRequest> requests = new HashSet<MeasurementScheduleRequest>();
+ DataType measurement = DataType.MEASUREMENT;
+ MeasurementScheduleRequest request = new MeasurementScheduleRequest(0, "ActiveCount", 1, true, measurement);
+ requests.add(request);
+
+ String reqName = "PreparedStatementCacheAccessCount";
+ request = new MeasurementScheduleRequest(0, reqName, 1, true, measurement);
+ requests.add(request);
+
+ InitialContext context = new InitialContext();
+ javax.sql.DataSource sqlDS = (javax.sql.DataSource)context.lookup(getDataSource().getJndiName());
+ Connection conn = sqlDS.getConnection();
+ PreparedStatement pstmt = conn.prepareStatement("SHOW SCHEMAS");
+
+ facet.getValues(report, requests);
+
+ for (MeasurementDataNumeric data : report.getNumericData())
+ {
+ if (data.getName().equals("ActiveCount"))
+ {
+ assertTrue(data.getValue() >= 1);
+ }
+ else if (data.getName().equals(reqName))
+ {
+ assertTrue(data.getValue() >= 1);
+ }
+ }
+ pstmt.close();
+ conn.close();
+ }
+
+
+ /**
* Lifecycle start, before the suite is executed
* @throws Throwable throwable exception
*/
More information about the jboss-cvs-commits
mailing list