You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ge...@apache.org on 2010/11/29 15:09:17 UTC
svn commit: r1040116 - in /geronimo/server/branches/2.1/plugins/monitoring:
agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/SnapshotConfigXMLBuilder.java
agent-jmx/src/main/java/org/apache/geronimo/monitoring/MasterRemoteControlJMX.java
Author: genspring
Date: Mon Nov 29 14:09:17 2010
New Revision: 1040116
URL: http://svn.apache.org/viewvc?rev=1040116&view=rev
Log:
GERONIMO-5712 Geronimo should remember the monitoring server enablement status. Eable JMX agent snapshot thread status persistence
Modified:
geronimo/server/branches/2.1/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/SnapshotConfigXMLBuilder.java
geronimo/server/branches/2.1/plugins/monitoring/agent-jmx/src/main/java/org/apache/geronimo/monitoring/MasterRemoteControlJMX.java
Modified: geronimo/server/branches/2.1/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/SnapshotConfigXMLBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.1/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/SnapshotConfigXMLBuilder.java?rev=1040116&r1=1040115&r2=1040116&view=diff
==============================================================================
--- geronimo/server/branches/2.1/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/SnapshotConfigXMLBuilder.java (original)
+++ geronimo/server/branches/2.1/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/SnapshotConfigXMLBuilder.java Mon Nov 29 14:09:17 2010
@@ -17,7 +17,6 @@
package org.apache.geronimo.monitoring.snapshot;
import java.io.File;
-import java.io.FileOutputStream;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
@@ -26,7 +25,6 @@ import javax.xml.parsers.ParserConfigura
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlObject;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -37,6 +35,8 @@ import org.w3c.dom.NodeList;
* In charge of dealing with the XML processing of the snapshot's data.
*/
public class SnapshotConfigXMLBuilder {
+
+
private static Log log = LogFactory.getLog(SnapshotConfigXMLBuilder.class);
private static final String pathToXML =
@@ -45,8 +45,10 @@ public class SnapshotConfigXMLBuilder {
private static final String SNAPSHOT_CONFIG = "snapshot-config";
private static final String DURATION = "duration";
private static final String RETENTION = "retention";
+ private static final String SNAPSHOT_THREAD_START = "snapshotThreadStart";
private static final String MBEAN = "mbean";
+
/**
* @return A list of all mbean names that have been previously saved.
* These mbean names are those to keep track of for per snapshot.
@@ -129,13 +131,14 @@ public class SnapshotConfigXMLBuilder {
return true;
}
}
-
+
/**
* Saves the duration of the snapshot as a configuration attribute
* @param duration
*/
public static void saveDuration(long duration) {
- saveAttribute(DURATION, duration);
+
+ saveAttribute(DURATION, Long.toString(duration));
}
/**
@@ -143,7 +146,16 @@ public class SnapshotConfigXMLBuilder {
* @param retention
*/
public static void saveRetention(int retention) {
- saveAttribute(RETENTION, retention);
+ saveAttribute(RETENTION, Integer.toString(retention));
+ }
+
+ /**
+ * Remember the flag to determine if the snapshot thread
+ * should be started when the server is restarted.
+ * @param snapshotThreadStart
+ */
+ public static void saveSnapshotThreadStatus(boolean snapshotThreadStart) {
+ saveAttribute(SNAPSHOT_THREAD_START, Boolean.toString(snapshotThreadStart));
}
/**
@@ -152,7 +164,7 @@ public class SnapshotConfigXMLBuilder {
* @param attrName
* @param attributeValue
*/
- private static void saveAttribute(String attrName, long attributeValue) {
+ private static void saveAttribute(String attrName, String attributeValue) {
Document doc = openDocument();
// get the root node
Element rootElement = doc.getDocumentElement();
@@ -164,14 +176,14 @@ public class SnapshotConfigXMLBuilder {
Node configNode = configNodes.item(i);
if(attrName.equals(configNode.getNodeName())) {
// found a match
- configNode.setTextContent(attributeValue + "");
+ configNode.setTextContent(attributeValue);
foundNode = true;
}
}
// if there was not a duration node, make one
if(!foundNode) {
Element element = doc.createElement(attrName);
- element.setTextContent(attributeValue + "");
+ element.setTextContent(attributeValue);
rootElement.appendChild(element);
}
try {
@@ -315,4 +327,6 @@ public class SnapshotConfigXMLBuilder {
}
}
}
+
+
}
Modified: geronimo/server/branches/2.1/plugins/monitoring/agent-jmx/src/main/java/org/apache/geronimo/monitoring/MasterRemoteControlJMX.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.1/plugins/monitoring/agent-jmx/src/main/java/org/apache/geronimo/monitoring/MasterRemoteControlJMX.java?rev=1040116&r1=1040115&r2=1040116&view=diff
==============================================================================
--- geronimo/server/branches/2.1/plugins/monitoring/agent-jmx/src/main/java/org/apache/geronimo/monitoring/MasterRemoteControlJMX.java (original)
+++ geronimo/server/branches/2.1/plugins/monitoring/agent-jmx/src/main/java/org/apache/geronimo/monitoring/MasterRemoteControlJMX.java Mon Nov 29 14:09:17 2010
@@ -17,7 +17,6 @@
package org.apache.geronimo.monitoring;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -28,33 +27,24 @@ import javax.management.Attribute;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
-import javax.management.j2ee.Management;
-import javax.management.j2ee.ManagementHome;
-import javax.management.j2ee.statistics.BoundedRangeStatistic;
import javax.management.j2ee.statistics.RangeStatistic;
import javax.management.j2ee.statistics.Stats;
import javax.management.j2ee.statistics.CountStatistic;
import javax.management.j2ee.statistics.Statistic;
import javax.management.j2ee.statistics.TimeStatistic;
-import javax.naming.Context;
import javax.naming.InitialContext;
-import javax.naming.NamingException;
import javax.sql.DataSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.geronimo.connector.outbound.ManagedConnectionFactoryWrapper;
-import org.apache.geronimo.gbean.AbstractName;
import org.apache.geronimo.gbean.GBeanInfo;
import org.apache.geronimo.gbean.GBeanInfoBuilder;
import org.apache.geronimo.gbean.GBeanLifecycle;
import org.apache.geronimo.monitoring.MBeanHelper;
-import org.apache.xbean.naming.context.WritableContext.NestedWritableContext;
-
import org.apache.geronimo.monitoring.snapshot.SnapshotThread;
import org.apache.geronimo.monitoring.snapshot.SnapshotConfigXMLBuilder;
import org.apache.geronimo.monitoring.snapshot.SnapshotDBHelper;
@@ -71,6 +61,7 @@ public class MasterRemoteControlJMX impl
private static final int DEFAULT_RETENTION = 30;
private static final String RETENTION = "retention";
private static final String DURATION = "duration";
+ private static final String SNAPSHOT_THREAD_START = "snapshotThreadStart";
// mbean server to talk to other components
private static MBeanServer mbServer = null;
@@ -175,9 +166,18 @@ public class MasterRemoteControlJMX impl
* Stops the snapshot thread
*/
public boolean stopSnapshot() {
+
+ saveSnapshotThreadStatus(false);
+ return this.stopSnapshotOnly();
+
+ }
+
+ private boolean stopSnapshotOnly(){
+
if(snapshotThread != null) {
if(snapshotThread.getSnapshotDuration() != Long.MAX_VALUE) {
saveDuration(snapshotThread.getSnapshotDuration());
+ saveSnapshotThreadStatus(false);
snapshotThread.setSnapshotDuration(Long.MAX_VALUE);
log.info("Snapshot thread stopped.");
return true;
@@ -188,6 +188,7 @@ public class MasterRemoteControlJMX impl
log.error("There is not a snapshot thread running. Stopping aborted.");
return false;
}
+
}
/**
@@ -297,9 +298,12 @@ public class MasterRemoteControlJMX impl
public boolean startSnapshot(Long interval, Integer retention) {
if((snapshotThread == null || (snapshotThread != null && (snapshotThread.SnapshotStatus() == 0))) && interval.longValue() > 0) {
saveDuration(interval.longValue());
- saveRetention(retention.intValue());
+ saveRetention(retention.intValue());
+ saveSnapshotThreadStatus(true);
snapshotThread = new SnapshotThread(interval.longValue(), mbServer);
+ snapshotThread.setName("JMX Monitoring Agent Snapshot Thread");
snapshotThread.start();
+
log.info("Snapshot thread successfully created.");
return true;
} else {
@@ -349,7 +353,29 @@ public class MasterRemoteControlJMX impl
* Executes when the GBean starts up. Also starts the snapshot thread.
*/
public void doStart() {
-
+
+ String shouldJMXSnapshotBeOnlineStr="";
+ boolean shouldJMXSnapshotBeOnline = false;
+
+ try {
+ shouldJMXSnapshotBeOnlineStr = SnapshotConfigXMLBuilder.getAttributeValue(SNAPSHOT_THREAD_START);
+ shouldJMXSnapshotBeOnline = Boolean.parseBoolean(shouldJMXSnapshotBeOnlineStr);
+ } catch (Exception e1) {
+ log.debug("can't parse boolean value for string:"+shouldJMXSnapshotBeOnlineStr+",shouldJMXSnapshotBeOnline will be the defaul value:false", e1);
+ }
+
+ if (shouldJMXSnapshotBeOnline) {
+ String duration="";
+ long interval=DEFAULT_DURATION;
+ try {
+ duration=SnapshotConfigXMLBuilder.getAttributeValue(DURATION);
+ interval = Long.parseLong(duration);
+ } catch (Exception e) {
+ log.warn("failed to parse DURATION:+"+duration, e);
+ }
+
+ this.startSnapshot(interval);
+ }
}
/**
@@ -357,7 +383,7 @@ public class MasterRemoteControlJMX impl
*/
public void doStop() {
if(SnapshotStatus() == 1) {
- stopSnapshot();
+ stopSnapshotOnly();
}
}
@@ -369,6 +395,10 @@ public class MasterRemoteControlJMX impl
SnapshotConfigXMLBuilder.saveRetention(retention);
}
+ private void saveSnapshotThreadStatus(boolean snapshotThreadStart) {
+ SnapshotConfigXMLBuilder.saveSnapshotThreadStatus(snapshotThreadStart);
+ }
+
/**
* Adds a record of the mbean via its name to take snapshots of. As a result
* the mbeanName will be written to snapshot-config.xml