[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