You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ak...@apache.org on 2007/10/19 04:21:27 UTC

svn commit: r586231 - in /geronimo/sandbox/monitoring/mrc-server: mrc-ear/src/main/resources/ mrc-ejb/src/main/java/org/apache/geronimo/monitor/ mrc-ejb/src/main/java/org/apache/geronimo/monitor/snapshot/

Author: akulshreshtha
Date: Thu Oct 18 19:21:26 2007
New Revision: 586231

URL: http://svn.apache.org/viewvc?rev=586231&view=rev
Log:
GERONIMO-3537 Monitoring Plugin : Patch by Viet H. Nguyen

Modified:
    geronimo/sandbox/monitoring/mrc-server/mrc-ear/src/main/resources/MonitorDBPool.xml
    geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/MasterRemoteControl.java
    geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/SMP.java
    geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/snapshot/SnapshotThread.java

Modified: geronimo/sandbox/monitoring/mrc-server/mrc-ear/src/main/resources/MonitorDBPool.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/mrc-server/mrc-ear/src/main/resources/MonitorDBPool.xml?rev=586231&r1=586230&r2=586231&view=diff
==============================================================================
--- geronimo/sandbox/monitoring/mrc-server/mrc-ear/src/main/resources/MonitorDBPool.xml (original)
+++ geronimo/sandbox/monitoring/mrc-server/mrc-ear/src/main/resources/MonitorDBPool.xml Thu Oct 18 19:21:26 2007
@@ -22,10 +22,10 @@
             <connection-definition>
                 <connectionfactory-interface>javax.sql.DataSource</connectionfactory-interface>
                 <connectiondefinition-instance>
-                    <name>ActiveDBPool</name>
+                    <name>ActiveDS</name>
                     <config-property-setting name="Password">monitor</config-property-setting>
                     <config-property-setting name="UserName">monitor</config-property-setting>
-                    <config-property-setting name="ConnectionURL">jdbc:derby:ActiveDB;create=true</config-property-setting>
+                    <config-property-setting name="ConnectionURL">jdbc:derby:ActiveMRCDB;create=true</config-property-setting>
                     <connectionmanager>
                         <local-transaction/>
                         <single-pool>
@@ -41,9 +41,9 @@
             <connection-definition>
                 <connectionfactory-interface>javax.sql.DataSource</connectionfactory-interface>
                 <connectiondefinition-instance>
-                    <name>ArchiveDBPool</name>
+                    <name>ArchiveDS</name>
                     <config-property-setting name="Password">monitor</config-property-setting>
-                    <config-property-setting name="ConnectionURL">jdbc:derby:ArchiveDB;create=true</config-property-setting>
+                    <config-property-setting name="ConnectionURL">jdbc:derby:ArchiveMRCDB;create=true</config-property-setting>
                     <config-property-setting name="UserName">monitor</config-property-setting>
                     <connectionmanager>
                         <local-transaction/>

Modified: geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/MasterRemoteControl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/MasterRemoteControl.java?rev=586231&r1=586230&r2=586231&view=diff
==============================================================================
--- geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/MasterRemoteControl.java (original)
+++ geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/MasterRemoteControl.java Thu Oct 18 19:21:26 2007
@@ -16,12 +16,21 @@
  */
 package org.apache.geronimo.monitor;
 
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.sql.SQLException;
+import javax.naming.NamingException;
+import javax.sql.DataSource;
+
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Properties;
 import java.util.Set;
 
+import javax.annotation.Resource;
 import javax.annotation.security.RolesAllowed;
 import javax.annotation.security.RunAs;
 import javax.ejb.Remote;
@@ -85,6 +94,8 @@
     // use this to call utility functions pertaining to mbeans
     private static MBeanHelper mbeanHelper;
 
+    @Resource(name="ActiveDS") private DataSource ds;
+
     public MasterRemoteControl() {
         // retrieve the mbean server
         ArrayList mbServerList = MBeanServerFactory.findMBeanServer(null);
@@ -104,6 +115,56 @@
         }
         // instantiate teh mbean helper to query mbean names
         mbeanHelper = new MBeanHelper();
+
+        // set up databases
+        setUpDatabase();
+
+        if(ds == null) {
+            System.out.println("DataSource is NOT GOOD");
+        } else {
+            System.out.println("DataSource is GOOD");
+        }
+
+    }
+
+    private void setUpDatabase() {
+        try {
+            // TODO: 
+            //      Use a DataSource instead.
+            Connection conn = DriverManager.getConnection("jdbc:derby:ActiveMRCDB;create=true", "monitor", "monitor");
+            Statement stmt = conn.createStatement();
+            try {
+                // fetch all tables in the db
+                ResultSet allTablesResult = stmt.executeQuery("SELECT t.tablename FROM SYS.SYSTABLES t WHERE t.tablename NOT LIKE 'SYS%'");
+                boolean hasTables = false;
+                // determine if there are any tables in the db
+                while(allTablesResult.next()) {
+                    hasTables = true;
+                    break;
+                }
+                // create the tables if there aren't any tables in the db
+                if( !hasTables ) {
+                    createTables(stmt);
+                }
+            } catch(Exception e) {
+                e.printStackTrace();
+            }
+        } catch(SQLException e) {
+            e.printStackTrace();
+        }
+    }
+
+    private void createTables(Statement stmt) {
+        try {
+            String tableStatisticsCreate = "CREATE TABLE Statistics( id BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), mbeanId INT NOT NULL, statsValue BIGINT NOT NULL, statsName VARCHAR(100) NOT NULL, snapshot_time VARCHAR(20) NOT NULL, snapshot_date DATE NOT NULL, PRIMARY KEY(id))";
+            String tableMBeanCreate = "CREATE TABLE MBeans( id INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), name VARCHAR(256) NOT NULL, PRIMARY KEY(id) )";
+            stmt.executeUpdate(tableMBeanCreate);
+            System.out.println("MBean Table Created");
+            stmt.executeUpdate(tableStatisticsCreate);
+            System.out.println("Statistics Table Created");
+        } catch(Exception e) {
+            e.printStackTrace();
+        }
     }
 
     @RolesAllowed("mejbadmin")
@@ -116,6 +177,10 @@
 
             ManagementHome mejbHome = (ManagementHome)ctx.lookup("ejb/mgmt/MEJBRemoteHome");
             mejb = mejbHome.create();
+
+            // start the snapshot process
+            startSnapshot(DEFAULT_DURATION);
+
             // Uncomment to see if mejb is working well
             //System.out.println("SUCCESS!");
             //System.out.println("MEJB Default Domain: " + mejb.getDefaultDomain());
@@ -201,9 +266,9 @@
     public boolean startSnapshot(Long interval) {
         if((snapshotThread == null || (snapshotThread != null && !snapshotThread.isAlive())) &&
                 interval.longValue() > 0) {
-            saveDuration(interval.longValue());
-            snapshotThread = new SnapshotThread(interval.longValue(), mbServer);
+            snapshotThread = new SnapshotThread(interval.longValue(), mbServer, getStatisticsProviderMBeanNames());
             snapshotThread.start();
+            saveDuration(interval.longValue());
             return true;
         } else {
             System.out.println("There is already a snapshot thread running; Duration: " + interval.longValue());

Modified: geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/SMP.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/SMP.java?rev=586231&r1=586230&r2=586231&view=diff
==============================================================================
--- geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/SMP.java (original)
+++ geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/SMP.java Thu Oct 18 19:21:26 2007
@@ -44,10 +44,21 @@
 import javax.management.j2ee.Management;
 
 public class SMP {
-    private static final String PATH = "geronimo:ServiceModule=org.apache.geronimo.monitor/MRC/1.0/car,J2EEServer=geronimo,name=MasterRemoteControl,j2eeType=GBean";
-    
+    private static String PATH = "";
     public static void main(String[] args) {
         try {
+            Properties props = new Properties();
+            props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.openejb.client.RemoteInitialContextFactory");
+            props.setProperty(Context.PROVIDER_URL, "127.0.0.1:4201");
+            props.setProperty(Context.SECURITY_PRINCIPAL, "system");
+            props.setProperty(Context.SECURITY_CREDENTIALS, "manager");
+            props.setProperty("openejb.authentication.realmName", "geronimo-admin");
+            Context ic = new InitialContext(props);
+            System.out.println("Success: Initialized InitialContext");
+            MasterRemoteControlRemote mrc = (MasterRemoteControlRemote)ic.lookup("ejb/mgmt/MRCRemote");
+            System.out.println("Success: look up MRCRemote");
+            mrc.setUpMEJB();
+            System.out.println("Success: setUpMEJB");
         /*
             JMXServiceURL serviceURL = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1099/JMXConnector");
             Hashtable env = new Hashtable();
@@ -94,24 +105,29 @@
 //            testGetStatsAttr(mbServerConn);
             */
 //            MasterRemoteControl mrc;
-            Properties props = new Properties();
-            props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.openejb.client.RemoteInitialContextFactory");
-            props.setProperty(Context.PROVIDER_URL, "127.0.0.1:4201");
-            props.setProperty(Context.SECURITY_PRINCIPAL, "system");
-            props.setProperty(Context.SECURITY_CREDENTIALS, "manager");
-            props.setProperty("openejb.authentication.realmName", "geronimo-admin");
-            Context ic = new InitialContext(props);
-            System.out.println("Success: Initialized InitialContext");
-            MasterRemoteControlRemote o = (MasterRemoteControlRemote)ic.lookup("ejb/mgmt/MRCRemote");
-            System.out.println("Success: look up MRCRemote");
-            o.setUpMEJB();
-            System.out.println("Success: setUpMEJB");
-            //nagementHome o = (ManagementHome)ic.lookup("ejb/mgmt/MEJBRemoteHome");
-            //Management m = o.create();
-            System.out.println(o);
             //System.out.println(m.getDefaultDomain());
+            testPrintStatisticsProviderMBeans(mrc);
+            testPrintStats(mrc);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void testPrintStats(MasterRemoteControlRemote mrc) {
+        String mbeanName = "geronimo:J2EEServer=geronimo,ServiceModule=org.apache.geronimo.configs/tomcat6/2.1-SNAPSHOT/car,j2eeType=GBean,name=TomcatWebConnector";
+        try {
+            HashMap stats = mrc.getStats(mbeanName);
+            printStats(stats);
         } catch (Exception e) {
             e.printStackTrace();
+        }
+    }
+
+    private static void testPrintStatisticsProviderMBeans(MasterRemoteControlRemote mrc) {
+        Set<ObjectName> list = mrc.getStatisticsProviderMBeanNames();
+        for(Iterator<ObjectName> it = list.iterator(); it.hasNext(); ) {
+            String mbeanName = it.next().getCanonicalName();
+            System.out.println(mbeanName);
         }
     }
     

Modified: geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/snapshot/SnapshotThread.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/snapshot/SnapshotThread.java?rev=586231&r1=586230&r2=586231&view=diff
==============================================================================
--- geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/snapshot/SnapshotThread.java (original)
+++ geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/snapshot/SnapshotThread.java Thu Oct 18 19:21:26 2007
@@ -20,15 +20,18 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.Properties;
 import java.util.Set;
 
+import javax.naming.Context;
+import javax.naming.InitialContext;
 import javax.management.j2ee.Management;
 import javax.management.MBeanServer;
 import javax.management.MalformedObjectNameException;
 import javax.management.ObjectName;
 
 import org.apache.geronimo.monitor.snapshot.SnapshotXMLBuilder;
-import org.apache.geronimo.monitor.MasterRemoteControl;
+import org.apache.geronimo.monitor.MasterRemoteControlRemote;
 
 /**
  * Thread that is in charge of executing every x milliseconds. Upon each
@@ -39,17 +42,19 @@
     private long SNAPSHOT_DURATION;
     private MBeanServer mbServer = null;
     private SnapshotXMLBuilder snapshotXMLBuilder = null;
+    private Set<ObjectName> allMBeans = null;
     // list of mbean names that we will be taking snapshots of
     private ArrayList<String> mbeanNames;
     
     private boolean end = false;
     
-    public SnapshotThread(long snapshot_length, MBeanServer mbServer) {
+    public SnapshotThread(long snapshot_length, MBeanServer mbServer, Set<ObjectName> allMBeans) {
         SNAPSHOT_DURATION = snapshot_length;
         this.mbServer = mbServer;
         snapshotXMLBuilder = new SnapshotXMLBuilder();
         snapshotXMLBuilder.checkXMLExists();
         mbeanNames = new ArrayList<String>();
+        this.allMBeans = allMBeans;
     }
     
     /**
@@ -115,10 +120,11 @@
                 System.out.println("======SNAPSHOT======");
                 // instantiate map <mbean name, stats for mbean>
                 HashMap<String, HashMap> aggregateStats = new HashMap<String, HashMap>();
+                MasterRemoteControlRemote mrc = getMRC();
                 // for each mbean name in the list, get its stats
                 for(int i = 0; i < mbeanNames.size(); i++) {
                     String mbeanName = mbeanNames.get(i);
-                    HashMap stats = (HashMap)MasterRemoteControl.getStats(mbeanName);
+                    HashMap stats = (HashMap)mrc.getStats(mbeanName);
                     aggregateStats.put(mbeanName, stats);
                 }
                 // store the data
@@ -142,6 +148,7 @@
                 Thread.sleep(SNAPSHOT_DURATION);
             } catch(Exception e) {
                 e.printStackTrace();
+                break;
             }
         }
         System.out.println("Thread is stopped.");
@@ -153,7 +160,7 @@
      * @param mbeanList
      */
     private void setStatsOn(ArrayList<String> mbeanList) {
-        Management mejb = MasterRemoteControl.getMEJB();
+        MasterRemoteControlRemote mrc = getMRC();
         // for each mbean name in the list
         for(int i = 0; i < mbeanList.size(); i++) {
             // turn the statistics collection on
@@ -162,8 +169,8 @@
             String[] signatures = new String[] { "java.lang.Boolean" };
             try {
                 ObjectName objName = new ObjectName(mbeanList.get(i));
-                mejb.invoke(objName, methodName, params, signatures);
-                System.out.println("Stats for " + mbeanList.get(i) + " was turned on.");
+                //mejb.invoke(objName, methodName, params, signatures);
+                //System.out.println("Stats for " + mbeanList.get(i) + " was turned on.");
             } catch(MalformedObjectNameException e) {
                 e.printStackTrace();
             } catch(Exception e) {
@@ -177,16 +184,16 @@
     /**
      * @return A list of all default mbeans; namely, all connector or container mbean names
      * Prereq: in order to be a connector or container mbean the name must contain "Connector"/"Container" 
-     * and "Tomcat"/"Jetty"
+     * and "Tomcat"/"Jetty" or JVM.
      */
     private ArrayList<String> getDefaultMBeanList() {
-        Set<ObjectName> mbeans = (new MasterRemoteControl()).getStatisticsProviderMBeanNames();
+        Set<ObjectName> mbeans = allMBeans;
         ArrayList<String> retval = new ArrayList<String>();
         for(Iterator it = mbeans.iterator(); it.hasNext(); ) {
             String name = ((ObjectName)it.next()).getCanonicalName();
-            if((name.contains("Connector") || name.contains("Container")) &&
-                    (name.contains("Jetty") || name.contains("Tomcat"))) {
-                // this is a connector, so add to the list
+            if(((name.contains("Connector") || name.contains("Container")) && (name.contains("Jetty") || name.contains("Tomcat")))
+                                || name.contains("JVM")) {
+                // this is a connector or JVM, so add to the list
                 retval.add(name);
                 // update the snapshot-config.xml to include these
                 SnapshotConfigXMLBuilder.addMBeanName(name);
@@ -210,6 +217,7 @@
             // make a directory
             if(dir.mkdir()) {
                 // directory was successfully created
+                System.out.println("[INFO] /var/monitoring direction created.");
                 return;
             } else {
                 System.out.println("Could not make the directory " + pathToDir);
@@ -219,5 +227,21 @@
     
     public boolean getEnd() {
         return end;
+    }
+
+    public MasterRemoteControlRemote getMRC() {
+        Properties props = new Properties();
+        props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.openejb.client.RemoteInitialContextFactory");
+        props.setProperty(Context.PROVIDER_URL, "127.0.0.1:4201");
+        props.setProperty(Context.SECURITY_PRINCIPAL, "system");
+        props.setProperty(Context.SECURITY_CREDENTIALS, "manager");
+        props.setProperty("openejb.authentication.realmName", "geronimo-admin");
+        try {
+            Context ic = new InitialContext(props);
+            MasterRemoteControlRemote mrc = (MasterRemoteControlRemote)ic.lookup("ejb/mgmt/MRCRemote");
+            return mrc;
+        } catch(Exception e) {
+            return null;
+        }
     }
 }