geronimo-scm mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From akulshresh...@apache.org
Subject svn commit: r588109 - in /geronimo/sandbox/monitoring/client/client-war/src/main: java/org/apache/geronimo/plugins/monitoring/client/ webapp/WEB-INF/view/
Date Thu, 25 Oct 2007 01:42:59 GMT
Author: akulshreshtha
Date: Wed Oct 24 18:42:58 2007
New Revision: 588109

URL: http://svn.apache.org/viewvc?rev=588109&view=rev
Log:
GERONIMO-3527 Monitoring Client: Default Server view page, Patch by Erik B. Craig

Modified:
    geronimo/sandbox/monitoring/client/client-war/src/main/java/org/apache/geronimo/plugins/monitoring/client/GraphsBuilder.java
    geronimo/sandbox/monitoring/client/client-war/src/main/java/org/apache/geronimo/plugins/monitoring/client/MRCConnector.java
    geronimo/sandbox/monitoring/client/client-war/src/main/java/org/apache/geronimo/plugins/monitoring/client/MonitoringPortlet.java
    geronimo/sandbox/monitoring/client/client-war/src/main/webapp/WEB-INF/view/monitoringPage.jsp
    geronimo/sandbox/monitoring/client/client-war/src/main/webapp/WEB-INF/view/monitoringViewServer.jsp

Modified: geronimo/sandbox/monitoring/client/client-war/src/main/java/org/apache/geronimo/plugins/monitoring/client/GraphsBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/client/client-war/src/main/java/org/apache/geronimo/plugins/monitoring/client/GraphsBuilder.java?rev=588109&r1=588108&r2=588109&view=diff
==============================================================================
--- geronimo/sandbox/monitoring/client/client-war/src/main/java/org/apache/geronimo/plugins/monitoring/client/GraphsBuilder.java (original)
+++ geronimo/sandbox/monitoring/client/client-war/src/main/java/org/apache/geronimo/plugins/monitoring/client/GraphsBuilder.java Wed Oct 24 18:42:58 2007
@@ -25,19 +25,15 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
 import java.util.Vector;
 
 public class GraphsBuilder
 {
-    private String                                   ServerIP      = new String();
-    private final HashMap<String, ArrayList<String>> DataNameList  = new HashMap<String, ArrayList<String>>();
-    private int                                      timeFrame;
-    private int                                      snapCount;
-    private MRCConnector                             MRCConnection = new MRCConnector();
-    private final Connection                         Con;
+    private String           ServerIP      = new String();
+    private int              timeFrame;
+    private int              snapCount;
+    private MRCConnector     MRCConnection = new MRCConnector();
+    private final Connection Con;
 
     // constructor
     public GraphsBuilder(Connection con)
@@ -124,11 +120,10 @@
                 int skipCount = (int) ((timeFrame / (MRCConnector
                         .getSnapshotDuration() / 60000)))
                         / (snapCount - 2);
-                // TODO: Call the fetching thing here
                 ArrayList<HashMap<String, HashMap<String, Object>>> snapshotList = MRCConnection
                         .getSnapshots(snapCount, skipCount);
-                // Check if snapshotList is 0
-                // TODO: Return a buncha null datas
+                // Check if snapshotList is empty
+
                 if (snapshotList.size() == 0)
                 {
                     HashMap<String, HashMap<String, Object>> tempMap = new HashMap<String, HashMap<String, Object>>();
@@ -146,122 +141,130 @@
                     snapshotList
                             .add(new HashMap<String, HashMap<String, Object>>(
                                     tempMap));
-                }
-                /*
-                 * If there are not enough snapshots available to fill the requested
-                 * number, insert some with values of 0 and the proper times.
-                 */
-                while (snapshotList.size() < snapCount)
-                {
-                    // Temporary, always is first element (oldest)
-                    HashMap<String, HashMap<String, Object>> mapTimeFix = snapshotList
-                            .get(0);
-
-                    // Temporary map, used to generate blank data to be added to
-                    // the
-                    // list at position 0
-                    HashMap<String, HashMap<String, Object>> tempMap = new HashMap<String, HashMap<String, Object>>();
-
-                    // Temporary submap, used to store 0 elements to be added to
-                    // the
-                    // tempmap
-                    HashMap<String, Object> subMap = new HashMap<String, Object>();
-
-                    // Calculate appropriate time, add it to the submap, then
-                    // add
-                    // that to the tempMap
-                    subMap.put("snapshot_time", ((Long) mapTimeFix.get("times")
-                            .get("snapshot_time") - (MRCConnector
-                            .getSnapshotDuration() * skipCount)));
-                    Format formatter = null;
-                    formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-                    Date date = new Date((Long) subMap.get("snapshot_time"));
-                    subMap.put("snapshot_date", formatter.format(date));
-
-                    // Add the submap back to the tempmap
-                    tempMap.put("times", new HashMap<String, Object>(subMap));
-
-                    // Clear out the subMap for use again
-                    subMap.clear();
-
-                    // Run through the mbeans
-                    // Verify that it's not times
-                    // Run through the stats elements for the particular
-                    // mbean
-
-                    // Place faux data into the submap
-                    subMap.put(dataName, new Long(0));
-
-                    // Add the submap to the tempmap, and clear it
-                    tempMap.put(mBeanName, new HashMap<String, Object>(subMap));
+                    /*
+                     * If there are not enough snapshots available to fill the requested
+                     * number, insert some with values of 0 and the proper times.
+                     */
+                    while (snapshotList.size() < snapCount)
+                    {
+                        // Temporary, always is first element (oldest)
+                        HashMap<String, HashMap<String, Object>> mapTimeFix = snapshotList
+                                .get(0);
 
-                    snapshotList.add(0,
-                            new HashMap<String, HashMap<String, Object>>(
-                                    tempMap));
-                }
+                        // Temporary map, used to generate blank data to be
+                        // added to
+                        // the
+                        // list at position 0
+                        HashMap<String, HashMap<String, Object>> tempMap2 = new HashMap<String, HashMap<String, Object>>();
+
+                        // Temporary submap, used to store 0 elements to be
+                        // added to
+                        // the
+                        // tempmap
+                        HashMap<String, Object> subMap2 = new HashMap<String, Object>();
+
+                        // Calculate appropriate time, add it to the submap,
+                        // then
+                        // add
+                        // that to the tempMap
+                        subMap2.put("snapshot_time", ((Long) mapTimeFix.get(
+                                "times").get("snapshot_time") - (MRCConnector
+                                .getSnapshotDuration() * skipCount)));
+                        Format formatter2 = null;
+                        formatter2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                        Date date2 = new Date((Long) subMap2
+                                .get("snapshot_time"));
+                        subMap2.put("snapshot_date", formatter2.format(date2));
+
+                        // Add the submap back to the tempmap
+                        tempMap2.put("times", new HashMap<String, Object>(
+                                subMap2));
+
+                        // Clear out the subMap for use again
+                        subMap2.clear();
+
+                        // Run through the mbeans
+                        // Verify that it's not times
+                        // Run through the stats elements for the particular
+                        // mbean
+
+                        // Place faux data into the submap
+                        subMap2.put(dataName, new Long(0));
+
+                        // Add the submap to the tempmap, and clear it
+                        tempMap2.put(mBeanName, new HashMap<String, Object>(
+                                subMap2));
+
+                        snapshotList.add(0,
+                                new HashMap<String, HashMap<String, Object>>(
+                                        tempMap2));
+                    }
 
-                /*
-                 * This is where we will be inserting data to fill 'gaps' in the
-                 * snapshots The initial for-loop will travel from the most recent
-                 * snapshot to the oldest, checking that the snapshot_time along the
-                 * way all align with what they should be
-                 */
-                for (int i = snapshotList.size() - 1; i > 0; i--)
-                {
-                    if (i > 0)
+                    /*
+                     * This is where we will be inserting data to fill 'gaps' in the
+                     * snapshots The initial for-loop will travel from the most recent
+                     * snapshot to the oldest, checking that the snapshot_time along the
+                     * way all align with what they should be
+                     */
+                    for (int i = snapshotList.size() - 1; i > 0; i--)
                     {
-                        HashMap<String, HashMap<String, Object>> mapTimeFix = snapshotList
-                                .get(i);
-                        HashMap<String, HashMap<String, Object>> mapTimeFix2 = snapshotList
-                                .get(i - 1);
-                        // here is where we will in missing data
-                        while (((((Long) mapTimeFix.get("times").get(
-                                "snapshot_time") / 1000) / 60)
-                                - (((Long) mapTimeFix2.get("times").get(
-                                        "snapshot_time") / 1000) / 60) > (((MRCConnector
-                                .getSnapshotDuration() / 1000) / 60) * skipCount)))
+                        if (i > 0)
                         {
-                            HashMap<String, HashMap<String, Object>> tempMap = new HashMap<String, HashMap<String, Object>>();
-                            HashMap<String, Object> subMap = new HashMap<String, Object>();
-
-                            // Verify that it's not times
-                            // Run through the stats elements for the
-                            // particular
-
-                            // Place faux data into the submap
-                            subMap.put(dataName, new Long(0));
-
-                            // Add the submap to the tempmap, and clear it
-                            tempMap.put(mBeanName, new HashMap<String, Object>(
-                                    subMap));
-                            subMap.clear();
-
-                            subMap
-                                    .put(
-                                            "snapshot_time",
-                                            new Long(
-                                                    (Long) mapTimeFix.get(
-                                                            "times").get(
-                                                            "snapshot_time")
-                                                            - (MRCConnector
-                                                                    .getSnapshotDuration() * skipCount)));
-                            Format formatter = null;
-                            formatter = new SimpleDateFormat(
-                                    "yyyy-MM-dd HH:mm:ss");
-                            Date date = new Date((Long) subMap
-                                    .get("snapshot_time"));
-                            subMap.put("snapshot_date", formatter.format(date));
-                            tempMap.put("times", new HashMap<String, Object>(
-                                    subMap));
-                            subMap.clear();
-                            snapshotList
-                                    .add(
-                                            i,
-                                            new HashMap<String, HashMap<String, Object>>(
-                                                    tempMap));
-                            snapshotList.remove(0);
-                            mapTimeFix = tempMap;
-                            mapTimeFix2 = snapshotList.get(i - 1);
+                            HashMap<String, HashMap<String, Object>> mapTimeFix = snapshotList
+                                    .get(i);
+                            HashMap<String, HashMap<String, Object>> mapTimeFix2 = snapshotList
+                                    .get(i - 1);
+                            // here is where we will in missing data
+                            while (((((Long) mapTimeFix.get("times").get(
+                                    "snapshot_time") / 1000) / 60)
+                                    - (((Long) mapTimeFix2.get("times").get(
+                                            "snapshot_time") / 1000) / 60) > (((MRCConnector
+                                    .getSnapshotDuration() / 1000) / 60) * skipCount)))
+                            {
+                                HashMap<String, HashMap<String, Object>> tempMap2 = new HashMap<String, HashMap<String, Object>>();
+                                HashMap<String, Object> subMap2 = new HashMap<String, Object>();
+
+                                // Verify that it's not times
+                                // Run through the stats elements for the
+                                // particular
+
+                                // Place faux data into the submap
+                                subMap2.put(dataName, new Long(0));
+
+                                // Add the submap to the tempmap, and clear it
+                                tempMap2.put(mBeanName,
+                                        new HashMap<String, Object>(subMap2));
+                                subMap2.clear();
+
+                                subMap2
+                                        .put(
+                                                "snapshot_time",
+                                                new Long(
+                                                        (Long) mapTimeFix
+                                                                .get("times")
+                                                                .get(
+                                                                        "snapshot_time")
+                                                                - (MRCConnector
+                                                                        .getSnapshotDuration() * skipCount)));
+                                Format formatter2 = null;
+                                formatter2 = new SimpleDateFormat(
+                                        "yyyy-MM-dd HH:mm:ss");
+                                Date date2 = new Date((Long) subMap2
+                                        .get("snapshot_time"));
+                                subMap2.put("snapshot_date", formatter2
+                                        .format(date2));
+                                tempMap2.put("times",
+                                        new HashMap<String, Object>(subMap2));
+                                subMap2.clear();
+                                snapshotList
+                                        .add(
+                                                i,
+                                                new HashMap<String, HashMap<String, Object>>(
+                                                        tempMap2));
+                                snapshotList.remove(0);
+                                mapTimeFix = tempMap2;
+                                mapTimeFix2 = snapshotList.get(i - 1);
+                            }
                         }
                     }
                 }
@@ -298,21 +301,5 @@
         }
         else
             return null;
-    }
-
-    public Set<String> GetTrackedBeansPretty()
-    {
-        Set<String> trackedBeans = new HashSet<String>();
-        for (Iterator<String> it = DataNameList.keySet().iterator(); it
-                .hasNext();)
-        {
-            String mbeanName = it.next();
-            if (!mbeanName.equals("times"))
-            {
-                String[] beanTemp = mbeanName.split("=");
-                trackedBeans.add(beanTemp[beanTemp.length - 1]);
-            }
-        }
-        return trackedBeans;
     }
 }

Modified: geronimo/sandbox/monitoring/client/client-war/src/main/java/org/apache/geronimo/plugins/monitoring/client/MRCConnector.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/client/client-war/src/main/java/org/apache/geronimo/plugins/monitoring/client/MRCConnector.java?rev=588109&r1=588108&r2=588109&view=diff
==============================================================================
--- geronimo/sandbox/monitoring/client/client-war/src/main/java/org/apache/geronimo/plugins/monitoring/client/MRCConnector.java (original)
+++ geronimo/sandbox/monitoring/client/client-war/src/main/java/org/apache/geronimo/plugins/monitoring/client/MRCConnector.java Wed Oct 24 18:42:58 2007
@@ -16,11 +16,16 @@
  */
 package org.apache.geronimo.plugins.monitoring.client;
 
+import java.text.Format;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Properties;
 import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
 
 import javax.naming.Context;
 import javax.naming.InitialContext;
@@ -126,7 +131,322 @@
     public ArrayList<HashMap<String, HashMap<String, Object>>> getSnapshots(
             int snapCount, int skipCount) throws Exception
     {
-        return mrc.fetchSnapshotData(snapCount, skipCount);
+        ArrayList<HashMap<String, HashMap<String, Object>>> snapshotList = mrc
+                .fetchSnapshotData(snapCount, skipCount);
+        // Check if snapshotList is empty
+        if (snapshotList.size() == 0)
+        {
+            return snapshotList;
+        }
+        /*
+         * If there are not enough snapshots available to fill the requested
+         * number, insert some with values of 0 and the proper times.
+         */
+        while (snapshotList.size() < snapCount)
+        {
+            // Temporary, always is first element (oldest)
+            HashMap<String, HashMap<String, Object>> mapTimeFix = snapshotList
+                    .get(0);
+
+            // Temporary map, used to generate blank data to be added to
+            // the
+            // list at position 0
+            HashMap<String, HashMap<String, Object>> tempMap = new HashMap<String, HashMap<String, Object>>();
+
+            // Temporary submap, used to store 0 elements to be added to
+            // the
+            // tempmap
+            HashMap<String, Object> subMap = new HashMap<String, Object>();
+
+            // Calculate appropriate time, add it to the submap, then
+            // add
+            // that to the tempMap
+            subMap
+                    .put("snapshot_time", ((Long) mapTimeFix.get("times").get(
+                            "snapshot_time") - (MRCConnector
+                            .getSnapshotDuration() * skipCount)));
+            Format formatter = null;
+            formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            Date date = new Date((Long) subMap.get("snapshot_time"));
+            subMap.put("snapshot_date", formatter.format(date));
+
+            // Add the submap back to the tempmap
+            tempMap.put("times", new HashMap<String, Object>(subMap));
+
+            // Clear out the subMap for use again
+            subMap.clear();
+
+            // Run through the mbeans
+
+            // Run through the mbeans
+            for (Iterator<String> it = mapTimeFix.keySet().iterator(); it
+                    .hasNext();)
+            {
+                // get the mbean name
+                String mbeanName = it.next();
+                HashMap<String, Object> stats = null;
+                // Verify that it's not times
+
+                if (mbeanName.equals(new String("times")))
+                {
+
+                }
+                else
+                {
+                    stats = mapTimeFix.get(mbeanName);
+                    // Run through the stats elements for the particular
+                    // mbean
+                    for (Iterator<String> itt = stats.keySet().iterator(); itt
+                            .hasNext();)
+                    {
+                        String key = itt.next();
+                        // Place faux data into the submap
+                        subMap.put(key, new Long(0));
+                    }
+                    // Add the submap to the tempmap, and clear it
+                    tempMap.put(mbeanName, new HashMap<String, Object>(subMap));
+                }
+            }
+            snapshotList.add(0, new HashMap<String, HashMap<String, Object>>(
+                    tempMap));
+        }
+
+        /*
+         * This is where we will be inserting data to fill 'gaps' in the
+         * snapshots The initial for-loop will travel from the most recent
+         * snapshot to the oldest, checking that the snapshot_time along the
+         * way all align with what they should be
+         */
+        for (int i = snapshotList.size() - 1; i > 0; i--)
+        {
+            if (i > 0)
+            {
+                HashMap<String, HashMap<String, Object>> mapTimeFix = snapshotList
+                        .get(i);
+                HashMap<String, HashMap<String, Object>> mapTimeFix2 = snapshotList
+                        .get(i - 1);
+                // here is where we will in missing data
+                while (((((Long) mapTimeFix.get("times").get("snapshot_time") / 1000) / 60)
+                        - (((Long) mapTimeFix2.get("times")
+                                .get("snapshot_time") / 1000) / 60) > (((MRCConnector
+                        .getSnapshotDuration() / 1000) / 60) * skipCount)))
+                {
+                    HashMap<String, HashMap<String, Object>> tempMap = new HashMap<String, HashMap<String, Object>>();
+                    HashMap<String, Object> subMap = new HashMap<String, Object>();
+
+                    for (Iterator<String> it = mapTimeFix.keySet().iterator(); it
+                            .hasNext();)
+                    {
+                        // get the mbean name
+                        String mbeanName = it.next();
+                        HashMap<String, Object> stats = null;
+                        // Verify that it's not times
+                        if (!mbeanName.equals("times"))
+                        {
+                            stats = mapTimeFix.get(mbeanName);
+                            // Run through the stats elements for the
+                            // particular
+                            // mbean
+                            for (Iterator<String> itt = stats.keySet()
+                                    .iterator(); itt.hasNext();)
+                            {
+                                String key = itt.next();
+                                // Place faux data into the submap
+                                subMap.put(key, new Long(0));
+                            }
+                            // Add the submap to the tempmap, and clear it
+                            tempMap.put(mbeanName, new HashMap<String, Object>(
+                                    subMap));
+                            subMap.clear();
+                        }
+                    }
+
+                    subMap
+                            .put(
+                                    "snapshot_time",
+                                    new Long(
+                                            (Long) mapTimeFix.get("times").get(
+                                                    "snapshot_time")
+                                                    - (MRCConnector
+                                                            .getSnapshotDuration() * skipCount)));
+                    Format formatter = null;
+                    formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                    Date date = new Date((Long) subMap.get("snapshot_time"));
+                    subMap.put("snapshot_date", formatter.format(date));
+                    tempMap.put("times", new HashMap<String, Object>(subMap));
+                    subMap.clear();
+                    snapshotList.add(i,
+                            new HashMap<String, HashMap<String, Object>>(
+                                    tempMap));
+                    snapshotList.remove(0);
+                    mapTimeFix = tempMap;
+                    mapTimeFix2 = snapshotList.get(i - 1);
+                }
+            }
+        }
+        return snapshotList;
+    }
+
+    @SuppressWarnings("unchecked")
+    public ArrayList<HashMap<String, HashMap<String, Object>>> getLatestSnapshots()
+            throws Exception
+    {
+        int snapCount = 2;
+        int skipCount = 1;
+        ArrayList<HashMap<String, HashMap<String, Object>>> snapshotList = mrc
+                .fetchSnapshotData(snapCount, skipCount);
+        // Check if snapshotList is empty
+        if (snapshotList.size() == 0)
+        {
+            return snapshotList;
+        }
+        /*
+         * If there are not enough snapshots available to fill the requested
+         * number, insert some with values of 0 and the proper times.
+         */
+        while (snapshotList.size() < snapCount)
+        {
+            // Temporary, always is first element (oldest)
+            HashMap<String, HashMap<String, Object>> mapTimeFix = snapshotList
+                    .get(0);
+
+            // Temporary map, used to generate blank data to be added to
+            // the
+            // list at position 0
+            HashMap<String, HashMap<String, Object>> tempMap = new HashMap<String, HashMap<String, Object>>();
+
+            // Temporary submap, used to store 0 elements to be added to
+            // the
+            // tempmap
+            HashMap<String, Object> subMap = new HashMap<String, Object>();
+
+            // Calculate appropriate time, add it to the submap, then
+            // add
+            // that to the tempMap
+            subMap
+                    .put("snapshot_time", ((Long) mapTimeFix.get("times").get(
+                            "snapshot_time") - (MRCConnector
+                            .getSnapshotDuration() * skipCount)));
+            Format formatter = null;
+            formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            Date date = new Date((Long) subMap.get("snapshot_time"));
+            subMap.put("snapshot_date", formatter.format(date));
+
+            // Add the submap back to the tempmap
+            tempMap.put("times", new HashMap<String, Object>(subMap));
+
+            // Clear out the subMap for use again
+            subMap.clear();
+
+            // Run through the mbeans
+
+            // Run through the mbeans
+            for (Iterator<String> it = mapTimeFix.keySet().iterator(); it
+                    .hasNext();)
+            {
+                // get the mbean name
+                String mbeanName = it.next();
+                HashMap<String, Object> stats = null;
+                // Verify that it's not times
+
+                if (mbeanName.equals(new String("times")))
+                {
+
+                }
+                else
+                {
+                    stats = mapTimeFix.get(mbeanName);
+                    // Run through the stats elements for the particular
+                    // mbean
+                    for (Iterator<String> itt = stats.keySet().iterator(); itt
+                            .hasNext();)
+                    {
+                        String key = itt.next();
+                        // Place faux data into the submap
+                        subMap.put(key, new Long(0));
+                    }
+                    // Add the submap to the tempmap, and clear it
+                    tempMap.put(mbeanName, new HashMap<String, Object>(subMap));
+                }
+            }
+            snapshotList.add(0, new HashMap<String, HashMap<String, Object>>(
+                    tempMap));
+        }
+
+        /*
+         * This is where we will be inserting data to fill 'gaps' in the
+         * snapshots The initial for-loop will travel from the most recent
+         * snapshot to the oldest, checking that the snapshot_time along the
+         * way all align with what they should be
+         */
+        for (int i = snapshotList.size() - 1; i > 0; i--)
+        {
+            if (i > 0)
+            {
+                HashMap<String, HashMap<String, Object>> mapTimeFix = snapshotList
+                        .get(i);
+                HashMap<String, HashMap<String, Object>> mapTimeFix2 = snapshotList
+                        .get(i - 1);
+                // here is where we will in missing data
+                while (((((Long) mapTimeFix.get("times").get("snapshot_time") / 1000) / 60)
+                        - (((Long) mapTimeFix2.get("times")
+                                .get("snapshot_time") / 1000) / 60) > (((MRCConnector
+                        .getSnapshotDuration() / 1000) / 60) * skipCount)))
+                {
+                    HashMap<String, HashMap<String, Object>> tempMap = new HashMap<String, HashMap<String, Object>>();
+                    HashMap<String, Object> subMap = new HashMap<String, Object>();
+
+                    for (Iterator<String> it = mapTimeFix.keySet().iterator(); it
+                            .hasNext();)
+                    {
+                        // get the mbean name
+                        String mbeanName = it.next();
+                        HashMap<String, Object> stats = null;
+                        // Verify that it's not times
+                        if (!mbeanName.equals("times"))
+                        {
+                            stats = mapTimeFix.get(mbeanName);
+                            // Run through the stats elements for the
+                            // particular
+                            // mbean
+                            for (Iterator<String> itt = stats.keySet()
+                                    .iterator(); itt.hasNext();)
+                            {
+                                String key = itt.next();
+                                // Place faux data into the submap
+                                subMap.put(key, new Long(0));
+                            }
+                            // Add the submap to the tempmap, and clear it
+                            tempMap.put(mbeanName, new HashMap<String, Object>(
+                                    subMap));
+                            subMap.clear();
+                        }
+                    }
+
+                    subMap
+                            .put(
+                                    "snapshot_time",
+                                    new Long(
+                                            (Long) mapTimeFix.get("times").get(
+                                                    "snapshot_time")
+                                                    - (MRCConnector
+                                                            .getSnapshotDuration() * skipCount)));
+                    Format formatter = null;
+                    formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                    Date date = new Date((Long) subMap.get("snapshot_time"));
+                    subMap.put("snapshot_date", formatter.format(date));
+                    tempMap.put("times", new HashMap<String, Object>(subMap));
+                    subMap.clear();
+                    snapshotList.add(i,
+                            new HashMap<String, HashMap<String, Object>>(
+                                    tempMap));
+                    snapshotList.remove(0);
+                    mapTimeFix = tempMap;
+                    mapTimeFix2 = snapshotList.get(i - 1);
+                }
+            }
+        }
+        return snapshotList;
     }
 
     /**
@@ -161,8 +481,203 @@
     }
 
     @SuppressWarnings("unchecked")
-    public Set<String> getStatisticsProviderMBeanNames() throws Exception
+    public Set<String> getStatisticsProviderBeanNames() throws Exception
     {
         return mrc.getStatisticsProviderMBeanNames();
     }
+
+    @SuppressWarnings("unchecked")
+    public HashMap<String, ArrayList<String>> getAllSnapshotStatAttributes()
+            throws Exception
+    {
+        return mrc.getAllSnapshotStatAttributes();
+    }
+
+    @SuppressWarnings("unchecked")
+    public Set<String> getTrackedBeans() throws Exception
+    {
+        return mrc.getTrackedMBeans();
+    }
+
+    @SuppressWarnings("unchecked")
+    public Set<String> getStatAttributesOnMBean(String mBean) throws Exception
+    {
+        HashMap<String, ArrayList<String>> allStatAttributes = getAllSnapshotStatAttributes();
+        ArrayList<String> tempArrayList = allStatAttributes.get(mBean);
+        Set<String> tempSet = new TreeSet<String>();
+        Iterator it = tempArrayList.iterator();
+        while (it.hasNext())
+        {
+            tempSet.add(it.next().toString());
+        }
+        return tempSet;
+    }
+
+    @SuppressWarnings("unchecked")
+    public Set<String> getTrackedBeansPretty() throws Exception
+    {
+        Set trackedBeans = getTrackedBeans();
+        Set prettybeans = new TreeSet();
+        Iterator it = trackedBeans.iterator();
+        while (it.hasNext())
+        {
+            String[] temparray1 = it.next().toString().split("name=");
+            String[] temparray2 = temparray1[1].split(",");
+            String[] temparray3 = temparray2[0].split("/");
+            String mbeanName = null;
+            if (temparray3.length > 1)
+                mbeanName = temparray3[1];
+            else
+                mbeanName = temparray2[0];
+            prettybeans.add(mbeanName);
+        }
+        return prettybeans;
+    }
+
+    @SuppressWarnings("unchecked")
+    public TreeMap<String, String> getTrackedBeansMap() throws Exception
+    {
+        Set trackedBeans = getTrackedBeans();
+        TreeMap<String, String> beanMap = new TreeMap<String, String>();
+        Iterator it = trackedBeans.iterator();
+        while (it.hasNext())
+        {
+            String mbeanName = it.next().toString();
+            String[] temparray1 = mbeanName.split("name=");
+            String[] temparray2 = temparray1[1].split(",");
+            String[] temparray3 = temparray2[0].split("/");
+            String mbeanNamePretty = null;
+            if (temparray3.length > 1)
+                mbeanNamePretty = temparray3[1];
+            else
+                mbeanNamePretty = temparray2[0];
+            beanMap.put(mbeanNamePretty, mbeanName);
+        }
+        return beanMap;
+    }
+
+    @SuppressWarnings("unchecked")
+    public Set<String> getStatisticsProviderBeanNamesPretty() throws Exception
+    {
+        Set availableBeans = getStatisticsProviderBeanNames();
+        Set prettybeans = new TreeSet();
+        Iterator it = availableBeans.iterator();
+        while (it.hasNext())
+        {
+            String[] temparray1 = it.next().toString().split("name=");
+            String[] temparray2 = temparray1[1].split(",");
+            String[] temparray3 = temparray2[0].split("/");
+            String mbeanName = null;
+            if (temparray3.length > 1)
+                mbeanName = temparray3[1];
+            else
+                mbeanName = temparray2[0];
+            prettybeans.add(mbeanName);
+        }
+        return prettybeans;
+    }
+
+    @SuppressWarnings("unchecked")
+    public TreeMap<String, String> getStatisticsProviderBeanNamesMap()
+            throws Exception
+    {
+        Set availableBeans = getStatisticsProviderBeanNames();
+        TreeMap<String, String> beanMap = new TreeMap<String, String>();
+        Iterator it = availableBeans.iterator();
+        while (it.hasNext())
+        {
+            String mbeanName = it.next().toString();
+            String[] temparray1 = mbeanName.split("name=");
+            String[] temparray2 = temparray1[1].split(",");
+            String[] temparray3 = temparray2[0].split("/");
+            String mbeanNamePretty = null;
+            if (temparray3.length > 1)
+                mbeanNamePretty = temparray3[1];
+            else
+                mbeanNamePretty = temparray2[0];
+            beanMap.put(mbeanNamePretty, mbeanName);
+        }
+        return beanMap;
+    }
+
+    @SuppressWarnings("unchecked")
+    public Set<String> getFreeStatisticsProviderBeanNamesPretty()
+            throws Exception
+    {
+        Set<String> availableBeans = getStatisticsProviderBeanNamesPretty();
+        Set<String> usedBeans = getTrackedBeansPretty();
+        Set freeBeans = new TreeSet();
+        Iterator it = availableBeans.iterator();
+        while (it.hasNext())
+        {
+            String mbeanName = it.next().toString();
+            if (!usedBeans.contains(mbeanName))
+                freeBeans.add(mbeanName);
+        }
+        return freeBeans;
+    }
+
+    @SuppressWarnings("unchecked")
+    public Set<String> getFreeStatisticsProviderBeanNames() throws Exception
+    {
+        Set<String> availableBeans = getStatisticsProviderBeanNames();
+        Set<String> usedBeans = getTrackedBeansPretty();
+        Set freeBeans = new TreeSet();
+        Iterator it = availableBeans.iterator();
+        while (it.hasNext())
+        {
+            String mbeanName = it.next().toString();
+            String[] temparray1 = mbeanName.split("name=");
+            String[] temparray2 = temparray1[1].split(",");
+            String[] temparray3 = temparray2[0].split("/");
+            String mbeanNamePretty = null;
+            if (temparray3.length > 1)
+                mbeanNamePretty = temparray3[1];
+            else
+                mbeanNamePretty = temparray2[0];
+            if (!usedBeans.contains(mbeanNamePretty))
+                freeBeans.add(mbeanName);
+        }
+        return freeBeans;
+    }
+
+    @SuppressWarnings("unchecked")
+    public TreeMap<String, String> getFreeStatisticsProviderBeanNamesMap()
+            throws Exception
+    {
+        Set<String> availableBeans = getStatisticsProviderBeanNames();
+        Set<String> usedBeans = getTrackedBeansPretty();
+        TreeMap<String, String> beanMap = new TreeMap<String, String>();
+        Iterator it = availableBeans.iterator();
+        while (it.hasNext())
+        {
+            String mbeanName = it.next().toString();
+            String[] temparray1 = mbeanName.split("name=");
+            String[] temparray2 = temparray1[1].split(",");
+            String[] temparray3 = temparray2[0].split("/");
+            String mbeanNamePretty = null;
+            if (temparray3.length > 1)
+                mbeanNamePretty = temparray3[1];
+            else
+                mbeanNamePretty = temparray2[0];
+            if (!usedBeans.contains(mbeanNamePretty))
+                beanMap.put(mbeanNamePretty, mbeanName);
+        }
+        return beanMap;
+    }
+
+    @SuppressWarnings("unchecked")
+    public boolean stopTrackingMbean(String MBean) throws Exception
+    {
+        mrc.removeMBeanForSnapshot(MBean);
+        return true;
+    }
+
+    @SuppressWarnings("unchecked")
+    public boolean startTrackingMbean(String MBean) throws Exception
+    {
+        mrc.addMBeanForSnapshot(MBean);
+        return true;
+    }
+
 }

Modified: geronimo/sandbox/monitoring/client/client-war/src/main/java/org/apache/geronimo/plugins/monitoring/client/MonitoringPortlet.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/client/client-war/src/main/java/org/apache/geronimo/plugins/monitoring/client/MonitoringPortlet.java?rev=588109&r1=588108&r2=588109&view=diff
==============================================================================
--- geronimo/sandbox/monitoring/client/client-war/src/main/java/org/apache/geronimo/plugins/monitoring/client/MonitoringPortlet.java (original)
+++ geronimo/sandbox/monitoring/client/client-war/src/main/java/org/apache/geronimo/plugins/monitoring/client/MonitoringPortlet.java Wed Oct 24 18:42:58 2007
@@ -87,6 +87,20 @@
             String server_id = actionRequest.getParameter("server_id");
             actionResponse.setRenderParameter("server_id", server_id);
         }
+        else if (action.equals("startTrackingMbean"))
+        {
+            String server_id = actionRequest.getParameter("server_id");
+            actionResponse.setRenderParameter("server_id", server_id);
+            String mbean = actionRequest.getParameter("mbean");
+            actionResponse.setRenderParameter("mbean", mbean);
+        }
+        else if (action.equals("stopTrackingMbean"))
+        {
+            String server_id = actionRequest.getParameter("server_id");
+            actionResponse.setRenderParameter("server_id", server_id);
+            String mbean = actionRequest.getParameter("mbean");
+            actionResponse.setRenderParameter("mbean", mbean);
+        }
         else if (action.equals("stopThread"))
         {
             String server_id = actionRequest.getParameter("server_id");
@@ -121,6 +135,181 @@
             String server_id = request.getParameter("server_id");
             request.setAttribute("server_id", server_id);
             viewServer.include(request, response);
+        }
+        else if (action.equals("startTrackingMbean"))
+        {
+            String server_id = request.getParameter("server_id");
+            request.setAttribute("server_id", server_id);
+            String mbean = request.getParameter("mbean");
+            request.setAttribute("mbean", mbean);
+            PreparedStatement pStmt = null;
+            ResultSet rs = null;
+            MRCConnector MRCConnection = null;
+            DBManager DBase = new DBManager();
+            Connection con = DBase.getConnection();
+            String server_ip = null;
+            try
+            {
+                pStmt = con
+                        .prepareStatement("SELECT * FROM servers WHERE server_id="
+                                + server_id);
+                rs = pStmt.executeQuery();
+                if (!rs.next())
+                {
+                    request.setAttribute("message",
+                            "<font color='red'>DATABASE ERROR: Server id "
+                                    + server_id
+                                    + " not found in database</font>");
+                    viewServer.include(request, response);
+                    return;
+                }
+            }
+            catch (SQLException e)
+            {
+                request.setAttribute("message",
+                        "<font color='red'>DATABASE ERROR: " + e.getMessage()
+                                + "</font>");
+                viewServer.include(request, response);
+                return;
+            }
+            try
+            {
+                server_ip = rs.getString("ip");
+                MRCConnection = new MRCConnector(server_ip, rs
+                        .getString("username"), rs.getString("password"));
+            }
+            catch (Exception e)
+            {
+                request
+                        .setAttribute("message",
+                                "<font color='red'>MRC ERROR: Unable to connect to server "
+                                        + server_ip + ": " + e.getMessage()
+                                        + "</font>");
+                viewServer.include(request, response);
+                return;
+            }
+            try
+            {
+                if (MRCConnection.startTrackingMbean(mbean))
+                {
+                    request.setAttribute("message", "<b>MBean " + mbean
+                            + " tracking on server " + rs.getString("name")
+                            + "</b>");
+                    viewServer.include(request, response);
+                }
+                else
+                {
+                    request.setAttribute("message",
+                            "<font color='red'>ERROR: MBean " + mbean
+                                    + " could <b>NOT</b> be tracked on server "
+                                    + rs.getString("name") + "</font>");
+                    viewServer.include(request, response);
+                    return;
+                }
+
+            }
+            catch (Exception e)
+            {
+                request
+                        .setAttribute(
+                                "message",
+                                "<font color='red'>MRC ERROR: MBean "
+                                        + mbean
+                                        + " could <b>NOT</b> be tracked on server "
+                                        + server_ip + ": " + e.getMessage()
+                                        + "</font>");
+                viewServer.include(request, response);
+                return;
+            }
+        }
+        else if (action.equals("stopTrackingMbean"))
+        {
+            String server_id = request.getParameter("server_id");
+            request.setAttribute("server_id", server_id);
+            String mbean = request.getParameter("mbean");
+            request.setAttribute("mbean", mbean);
+            PreparedStatement pStmt = null;
+            ResultSet rs = null;
+            MRCConnector MRCConnection = null;
+            DBManager DBase = new DBManager();
+            Connection con = DBase.getConnection();
+            String server_ip = null;
+            try
+            {
+                pStmt = con
+                        .prepareStatement("SELECT * FROM servers WHERE server_id="
+                                + server_id);
+                rs = pStmt.executeQuery();
+                if (!rs.next())
+                {
+                    request.setAttribute("message",
+                            "<font color='red'>DATABASE ERROR: Server id "
+                                    + server_id
+                                    + " not found in database</font>");
+                    viewServer.include(request, response);
+                    return;
+                }
+            }
+            catch (SQLException e)
+            {
+                request.setAttribute("message",
+                        "<font color='red'>DATABASE ERROR: " + e.getMessage()
+                                + "</font>");
+                viewServer.include(request, response);
+                return;
+            }
+            try
+            {
+                server_ip = rs.getString("ip");
+                MRCConnection = new MRCConnector(server_ip, rs
+                        .getString("username"), rs.getString("password"));
+            }
+            catch (Exception e)
+            {
+                request
+                        .setAttribute("message",
+                                "<font color='red'>MRC ERROR: Unable to connect to server "
+                                        + server_ip + ": " + e.getMessage()
+                                        + "</font>");
+                viewServer.include(request, response);
+                return;
+            }
+            try
+            {
+                if (MRCConnection.stopTrackingMbean(mbean))
+                {
+                    request.setAttribute("message", "<b>MBean " + mbean
+                            + " removed from tracking on server "
+                            + rs.getString("name") + "</b>");
+                    viewServer.include(request, response);
+                }
+                else
+                {
+                    request
+                            .setAttribute(
+                                    "message",
+                                    "<font color='red'>ERROR: MBean "
+                                            + mbean
+                                            + " could <b>NOT</b> be removed from tracking on server "
+                                            + rs.getString("name") + "</font>");
+                    viewServer.include(request, response);
+                    return;
+                }
+
+            }
+            catch (Exception e)
+            {
+                request
+                        .setAttribute(
+                                "message",
+                                "<font color='red'>MRC ERROR: MBean "
+                                        + mbean
+                                        + " could <b>NOT</b> be removed from tracking on server "
+                                        + server_ip + ": " + e.getMessage()
+                                        + "</font>");
+                viewServer.include(request, response);
+                return;
+            }
         }
         else if (action.equals("stopThread"))
         {

Modified: geronimo/sandbox/monitoring/client/client-war/src/main/webapp/WEB-INF/view/monitoringPage.jsp
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/client/client-war/src/main/webapp/WEB-INF/view/monitoringPage.jsp?rev=588109&r1=588108&r2=588109&view=diff
==============================================================================
--- geronimo/sandbox/monitoring/client/client-war/src/main/webapp/WEB-INF/view/monitoringPage.jsp (original)
+++ geronimo/sandbox/monitoring/client/client-war/src/main/webapp/WEB-INF/view/monitoringPage.jsp Wed Oct 24 18:42:58 2007
@@ -118,7 +118,7 @@
         <!-- Geronimo Links -->
         <td valign="top">
 
-            <table width="100%" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000">
+            <table width="100%" style="border-bottom: 1px solid #2581c7;" cellspacing="1" cellpadding="1">
                 <tr>
                     <td class="DarkBackground" align="left" nowrap>
                         <font face="Verdana" size="+1">Actions</font>
@@ -128,7 +128,7 @@
                     <td bgcolor="#FFFFFF" nowrap>
                         &nbsp;<br />
                         <ul>
-                        <li><a href="#">Modify the current view</a></li>
+                        <li><a href="#">Modify this view</a></li>
                         <li><a href="#">Create a new view</a></li>
                         </ul>
                         &nbsp;<br />
@@ -181,5 +181,6 @@
     </tr>
 </table>
     <%}%>
+
 
 

Modified: geronimo/sandbox/monitoring/client/client-war/src/main/webapp/WEB-INF/view/monitoringViewServer.jsp
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/client/client-war/src/main/webapp/WEB-INF/view/monitoringViewServer.jsp?rev=588109&r1=588108&r2=588109&view=diff
==============================================================================
--- geronimo/sandbox/monitoring/client/client-war/src/main/webapp/WEB-INF/view/monitoringViewServer.jsp (original)
+++ geronimo/sandbox/monitoring/client/client-war/src/main/webapp/WEB-INF/view/monitoringViewServer.jsp Wed Oct 24 18:42:58 2007
@@ -21,6 +21,7 @@
 <%@ page import="java.util.Vector" %>
 <%@ page import="java.util.Set" %>
 <%@ page import="java.util.Iterator" %>
+<%@ page import="java.util.TreeMap" %>
 <%@ page import="java.lang.String" %>
 <%@ page import="java.sql.Connection" %>
 <%@ page import="java.sql.DatabaseMetaData" %>
@@ -54,7 +55,8 @@
 {
     MRCConnector MRCConnection = new MRCConnector(rs2.getString("ip"), rs2
             .getString("username"), rs2.getString("password"));
-    Set <String> trackedMbeans = MRCConnection.getStatisticsProviderMBeanNames();
+    TreeMap <String,String> availableBeansMap = MRCConnection.getFreeStatisticsProviderBeanNamesMap();
+    TreeMap <String,String> trackedBeansMap = MRCConnection.getTrackedBeansMap();
 
     
 
@@ -95,18 +97,29 @@
     %>
     </script>
 <!-- </head> -->
-
+        <a HREF="javascript:history.go(-1)"><< Back</a><br>
+            <%
+ String message = (String) request.getAttribute("message"); 
+ if (message != null)
+ {
+ %>
+<p><%=message %></p><br>
+<%} %>
 <table>
     <tr>
         <!-- Body -->
         <td width="90%" align="left" valign="top">
-            <a HREF="javascript:history.go(-1)"><< Back</a>
             <p>
             <font face="Verdana" size="+1">
             <%=rs2.getString("name")%>
             </font>
             </p>         
             <p><%=rs2.getString("ip")%></p>
+            <table>
+            <tr><th>Stat</th><th>Value</th></tr>
+            </tr><td>JVM Memory:</td><td>5</td></tr>
+             </tr><td>JVM Stat:</td><td>2</td></tr>
+            </table>
 <% for (StatsGraph graph : GraphVector) 
 {
 %>
@@ -125,7 +138,7 @@
         <!-- Geronimo Links -->
         <td valign="top">
 
-            <table width="100%" style="border-bottom: 1px solid #2581c7;" cellspacing="0" cellpadding="3">
+            <table width="100%" style="border-bottom: 1px solid #2581c7;" cellspacing="1" cellpadding="1">
                 <tr>
                     <td class="DarkBackground" align="left" nowrap>
                         <font face="Verdana" size="+1">Actions</font>
@@ -144,82 +157,63 @@
             </table>
             <br>
             <br>
-            <table style="border-bottom: 1px solid #2581c7;" width="100%" cellspacing="0" cellpadding="3">
+            <table style="border-bottom: 1px solid #2581c7;" width="100%" cellspacing="1" cellpadding="1">
                 <tr>
                     <td colspan="2" class="DarkBackground" align="left" nowrap>
                         <font face="Verdana" size="+1">Statistics Collected</font>
                     </td>
                 </tr>
-                <tr>
+
+                        
+                        <%
+                        Iterator<String> itTracked = trackedBeansMap.keySet().iterator(); 
+                        while  ( itTracked.hasNext() )   
+                        {
+                            String prettyBean = itTracked.next().toString();
+                          %>
+                                           <tr>
                     <td width=95% bgcolor="#FFFFFF" nowrap>
-                        &nbsp;<br />
-                        <ul>
-                        <li><a href="#">Mbean1</a></li>
-                        <li><a href="#">Mbean2</a></li>
-                        <li><a href="#">Mbean3</a></li>
-                        <li><a href="#">Mbean4</a></li>
-                        </ul>
-                        &nbsp;<br />
-                    </td>
-                    <td align="right" width=5% bgcolor="#FFFFFF" nowrap>
-                        &nbsp;<br />
-                        <a href="#">x</a><br />
-                        <a href="#">x</a><br />
-                        <a href="#">x</a><br />
-                        <a href="#">x</a><br />
-                        &nbsp;<br />
-                    </td>     
+                           <a href="#"><%=prettyBean%></a>
+                           </td>
+                    <td align="right" width=5% bgcolor="#f2f2f2" nowrap>
+                    <a href="<portlet:actionURL portletMode="view"><portlet:param name="action" value="stopTrackingMbean" /><portlet:param name="server_id" value="<%=server_id%>" /><portlet:param name="mbean" value="<%=trackedBeansMap.get(prettyBean)%>" /></portlet:actionURL>">X</a><br>
+                                        </td>     
                 </tr>
+                        <%
+                         }
+                        %> 
             </table>
 
             <br>
             <br>
-            <table style="border-bottom: 1px solid #2581c7;" width="100%" cellspacing="0" cellpadding="3">
+            <table style="border-bottom: 1px solid #2581c7;" width="100%" cellspacing="1" cellpadding="1">
                 <tr>
                     <td colspan="2" class="DarkBackground" align="left" nowrap>
                         <font face="Verdana" size="+1">Statistics Available</font>
                     </td>
                 </tr>
-                <tr>
-                    <td width=95% bgcolor="#FFFFFF" nowrap>
-                        &nbsp;<br />
-                        <ul>
+
                         
                         <%
-                        Iterator it = trackedMbeans.iterator(); 
-                        while  ( it.hasNext() )   
+                        Iterator<String> itAvailable = availableBeansMap.keySet().iterator(); 
+                        while  ( itAvailable.hasNext() )   
                         {
-                           String[] temparray1 = it.next().toString().split("name=");
-                           String[] temparray2 = temparray1[1].split(",");
-                           String[] temparray3 = temparray2[0].split("/");
-                           String mbeanOut = null;
-                           if (temparray3.length > 1)
-                               mbeanOut = temparray3[1];
-                           else
-                               mbeanOut = temparray2[0];
-                         %>
-                           
-                           <li><a href="#"><%=mbeanOut%></a></li>
+                            String prettyBean = itAvailable.next().toString();
+                          %>
+                                           <tr>
+                    <td width=95% bgcolor="#FFFFFF" nowrap>
+                           <a href="#"><%=prettyBean%></a>
+                           </td>
+                    <td align="right" width=5% bgcolor="#f2f2f2" nowrap>
+                    <a href="<portlet:actionURL portletMode="view"><portlet:param name="action" value="startTrackingMbean" /><portlet:param name="server_id" value="<%=server_id%>" /><portlet:param name="mbean" value="<%=availableBeansMap.get(prettyBean)%>" /></portlet:actionURL>">+</a><br>
+                                        </td>     
+                </tr>
                         <%
                          }
                         %>                  
-                        </ul>
-                        &nbsp;<br />
-                    </td>
-                    <td align="right" width=5% bgcolor="#FFFFFF" nowrap>
-                        &nbsp;<br />
-                        
-                        <%
-                        for (int i = 0; i < trackedMbeans.size(); i++)
-                        {
-                            %>
-                            <a href="#">+</a><br>
-                           <%
-                        }
-                        %>
-                        &nbsp;<br />
-                    </td>     
-                </tr>
+                    
+                      
+
             </table>
             
         </td>        
@@ -246,7 +240,7 @@
         <!-- Geronimo Links -->
         <td valign="top">
 
-            <table width="100%" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000">
+            <table width="100%" style="border-bottom: 1px solid #2581c7;" cellspacing="1" cellpadding="1">
                 <tr>
                     <td class="DarkBackground" align="left" nowrap>
                         <font face="Verdana" size="+1">Actions</font>
@@ -267,5 +261,6 @@
     </tr>
 </table>
     <%}%>
+
 
 



Mime
View raw message