User: ejort
Date: 02/03/24 05:12:12
Modified: src/main/javax/management/monitor CounterMonitor.java
Monitor.java
Log:
merge RelMX_1_0_0_12 to RelMX_1_0_0_13 to dev branch
Revision Changes Path
1.2 +390 -376 jmx/src/main/javax/management/monitor/CounterMonitor.java
Index: CounterMonitor.java
===================================================================
RCS file: /cvsroot/jboss/jmx/src/main/javax/management/monitor/CounterMonitor.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- CounterMonitor.java 21 Dec 2001 01:39:37 -0000 1.1
+++ CounterMonitor.java 24 Mar 2002 13:12:12 -0000 1.2
@@ -1,376 +1,390 @@
-/*
-* JBoss, the OpenSource EJB server
-*
-* Distributable under LGPL license.
-* See terms of license at gnu.org.
-*/
-package javax.management.monitor;
-
-import javax.management.MBeanAttributeInfo;
-import javax.management.MBeanNotificationInfo;
-
-// REVIEW: Check synchronization
-
-/**
- * The counter monitor service.
- *
- * @author <a href="mailto:[EMAIL PROTECTED]">Adrian Brock</a>
- * @version $Revision$
- *
- */
-public class CounterMonitor
- extends Monitor
- implements CounterMonitorMBean
-{
- // Constants -----------------------------------------------------
-
- /**
- * The counter threshold exceeded has been notified.
- */
- int THRESHOLD_EXCEEDED_NOTIFIED = 16;
-
- /**
- * The threshold type error has been notified.
- */
- int THRESHOLD_ERROR_NOTIFIED = 32;
-
- // Attributes ----------------------------------------------------
-
- /**
- * The derived gauge.
- */
- private Number derivedGauge = new Integer(0);
-
- /**
- * The last value.
- */
- private Number lastValue = null;
-
- /**
- * The derived gauge timeStamp.
- */
- private long derivedGaugeTimeStamp = 0;
-
- /**
- * The offset.
- */
- Number offset = new Integer(0);
-
- /**
- * The modulus.
- */
- Number modulus = new Integer(0);
-
- /**
- * The threshold.
- */
- Number threshold = new Integer(0);
-
- /**
- * The last stated threshold.
- */
- Number lastThreshold = new Integer(0);
-
- /**
- * Difference mode.
- */
- boolean differenceMode = false;
-
- /**
- * Notify.
- */
- boolean notify = false;
-
- // Static --------------------------------------------------------
-
- // Constructors --------------------------------------------------
-
- /**
- * Default Constructor
- */
- public CounterMonitor()
- {
- dbgTag = "CounterMonitor";
- }
-
- // Public --------------------------------------------------------
-
- public MBeanNotificationInfo[] getNotificationInfo()
- {
- MBeanNotificationInfo[] result = new MBeanNotificationInfo[1];
- String[] types = new String[]
- {
- MonitorNotification.RUNTIME_ERROR,
- MonitorNotification.OBSERVED_OBJECT_ERROR,
- MonitorNotification.OBSERVED_ATTRIBUTE_ERROR,
- MonitorNotification.OBSERVED_ATTRIBUTE_TYPE_ERROR,
- MonitorNotification.THRESHOLD_ERROR,
- MonitorNotification.THRESHOLD_VALUE_EXCEEDED
- };
- result[0] = new MBeanNotificationInfo(types,
- "javax.management.monitor.MonitorNotification",
- "Notifications sent by the Counter Monitor Service MBean");
- return result;
- }
-
- // CounterMonitorMBean implementation ----------------------------
-
- public Number getDerivedGauge()
- {
- return derivedGauge;
- }
-
- public long getDerivedGaugeTimeStamp()
- {
- return derivedGaugeTimeStamp;
- }
-
- public boolean getDifferenceMode()
- {
- return differenceMode;
- }
-
- public void setDifferenceMode(boolean value)
- {
- differenceMode = value;
- }
-
- public Number getModulus()
- {
- return modulus;
- }
-
- public void setModulus(Number value)
- throws IllegalArgumentException
- {
- if (value == null)
- throw new IllegalArgumentException("Null modulus");
- if (value.longValue() < 0)
- throw new IllegalArgumentException("Negative modulus");
- modulus = value;
- alreadyNotified = RESET_FLAGS_ALREADY_NOTIFIED;
- }
-
- public boolean getNotify()
- {
- return notify;
- }
-
- public void setNotify(boolean value)
- {
- notify = value;
- }
-
- public Number getOffset()
- {
- return offset;
- }
-
- public void setOffset(Number value)
- throws IllegalArgumentException
- {
- if (value == null)
- throw new IllegalArgumentException("Null offset");
- if (value.longValue() < 0)
- throw new IllegalArgumentException("Negative offset");
- offset = value;
- alreadyNotified = RESET_FLAGS_ALREADY_NOTIFIED;
- }
-
- public Number getThreshold()
- {
- return threshold;
- }
-
- public void setThreshold(Number value)
- throws IllegalArgumentException
- {
- if (value == null)
- throw new IllegalArgumentException("Null threshold");
- if (value.longValue() < 0)
- throw new IllegalArgumentException("Negative threshold");
- threshold = value;
- lastThreshold = value;
- alreadyNotified = RESET_FLAGS_ALREADY_NOTIFIED;
- }
-
- // Override start to reset the last value for difference mode and
- // to get the initial gauge.
- public synchronized void start()
- {
- lastValue = null;
- derivedGauge = new Integer(0);
- derivedGaugeTimeStamp = System.currentTimeMillis();
- super.start();
- }
-
- // Package protected ---------------------------------------------
-
- // REVIEW: This works but needs tidying up!
- void monitor(MBeanAttributeInfo attributeInfo, Object value)
- throws Exception
- {
- // Wrong type of attribute
- if (!(value instanceof Byte) && !(value instanceof Integer) &&
- !(value instanceof Short) && !(value instanceof Long))
- {
- sendAttributeTypeErrorNotification("Attribute is not an integer type");
- return;
- }
-
- // Wrong threshold types
- if (threshold.getClass() != value.getClass()
- || offset.longValue() != 0 && offset.getClass() != value.getClass()
- || modulus.longValue() != 0 && modulus.getClass() != value.getClass())
- {
- sendThresholdErrorNotification(value);
- return;
- }
-
- // Cast the counter to a Number
- Number number = (Number) value;
-
- // Get the gauge and record when we got it.
- if (differenceMode)
- {
- if (lastValue == null)
- derivedGauge = getZero(number);
- else
- derivedGauge = sub(number, lastValue);
- if (derivedGauge.longValue() < 0 && modulus.longValue() != 0)
- derivedGauge = add(derivedGauge, modulus);
- }
- else
- derivedGauge = number;
- derivedGaugeTimeStamp = System.currentTimeMillis();
-
- // Fire the event if the threshold has been exceeded
- if (derivedGauge.longValue() >= threshold.longValue())
- {
- if ((alreadyNotified & THRESHOLD_EXCEEDED_NOTIFIED) == 0)
- {
- sendThresholdExceededNotification(derivedGauge);
- alreadyNotified |= THRESHOLD_EXCEEDED_NOTIFIED;
-
- // Add any offsets required to get a new threshold
- if (offset.longValue() != 0)
- {
- while(threshold.longValue() <= derivedGauge.longValue())
- threshold = add(threshold, offset);
- alreadyNotified &= ~THRESHOLD_EXCEEDED_NOTIFIED;
- }
- }
- }
- else
- {
- // Reset notfication when it becomes less than threshold
- if (derivedGauge.longValue() < threshold.longValue())
- alreadyNotified &= ~THRESHOLD_EXCEEDED_NOTIFIED;
- }
-
- // Apply any modulus, reset the threshold
- // REVIEW: This is not what the spec does, its what the RI does
- if (modulus.longValue() != 0 && lastValue !=null
- && lastValue.longValue() > number.longValue())
- {
- threshold = lastThreshold;
- alreadyNotified &= ~THRESHOLD_EXCEEDED_NOTIFIED;
- }
-
- // Remember the last value
- lastValue = number;
- }
-
- /**
- * Get zero for the type passed.
- *
- * @param the reference object
- * @return zero for the correct type
- */
- Number getZero(Number value)
- {
- if (value instanceof Byte)
- return new Byte((byte) 0);
- if (value instanceof Integer)
- return new Integer(0);
- if (value instanceof Short)
- return new Short((short) 0);
- return new Long(0);
- }
-
- /**
- * Add two numbers together.
- * @param value1 the first value.
- * @param value2 the second value.
- * @return value1 + value2 of the correct type
- */
- Number add(Number value1, Number value2)
- {
- if (value1 instanceof Byte)
- return new Byte((byte) (value1.byteValue() + value2.byteValue()));
- if (value1 instanceof Integer)
- return new Integer(value1.intValue() + value2.intValue());
- if (value1 instanceof Short)
- return new Short((short) (value1.shortValue() + value2.shortValue()));
- return new Long(value1.longValue() + value2.longValue());
- }
-
- /**
- * Subtract two numbers.
- * @param value1 the first value.
- * @param value2 the second value.
- * @return value1 - value2 of the correct type
- */
- Number sub(Number value1, Number value2)
- {
- if (value1 instanceof Byte)
- return new Byte((byte) (value1.byteValue() - value2.byteValue()));
- if (value1 instanceof Integer)
- return new Integer(value1.intValue() - value2.intValue());
- if (value1 instanceof Short)
- return new Short((short) (value1.shortValue() - value2.shortValue()));
- return new Long(value1.longValue() - value2.longValue());
- }
-
- /**
- * Send a threshold exceeded event.<p>
- *
- * This is only performed when requested and it has not already been sent.
- *
- * @param value the attribute value.
- */
- void sendThresholdExceededNotification(Object value)
- {
- if (notify)
- {
- sendNotification(MonitorNotification.THRESHOLD_VALUE_EXCEEDED,
- derivedGaugeTimeStamp, "threshold exceeded", observedAttribute, value,
- threshold);
- }
- }
-
- /**
- * Send a threshold error event.<p>
- *
- * This is only performed when requested and it has not already been sent.
- *
- * @param value the attribute value.
- */
- void sendThresholdErrorNotification(Object value)
- {
- if ((alreadyNotified & THRESHOLD_ERROR_NOTIFIED) == 0)
- {
- sendNotification(MonitorNotification.THRESHOLD_ERROR,
- derivedGaugeTimeStamp,
- "Threshold, offset or modulus not the correct type",
- observedAttribute, null, null);
- alreadyNotified |= THRESHOLD_ERROR_NOTIFIED;
- }
- }
-
- // Protected -----------------------------------------------------
-
- // Private -------------------------------------------------------
-
- // Inner classes -------------------------------------------------
-}
+/*
+* JBoss, the OpenSource EJB server
+*
+* Distributable under LGPL license.
+* See terms of license at gnu.org.
+*/
+package javax.management.monitor;
+
+import javax.management.MBeanAttributeInfo;
+import javax.management.MBeanNotificationInfo;
+
+// REVIEW: Check synchronization
+
+/**
+ * The counter monitor service.
+ *
+ * <p><b>Revisions:</b>
+ * <p><b>20020319 Adrian Brock:</b>
+ * <ul>
+ * <li>Reset the threshold when the value becomes negative in difference mode
+ * </ul>
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Adrian Brock</a>
+ * @version $Revision$
+ *
+ */
+public class CounterMonitor
+ extends Monitor
+ implements CounterMonitorMBean
+{
+ // Constants -----------------------------------------------------
+
+ /**
+ * The counter threshold exceeded has been notified.
+ */
+ int THRESHOLD_EXCEEDED_NOTIFIED = 16;
+
+ /**
+ * The threshold type error has been notified.
+ */
+ int THRESHOLD_ERROR_NOTIFIED = 32;
+
+ // Attributes ----------------------------------------------------
+
+ /**
+ * The derived gauge.
+ */
+ private Number derivedGauge = new Integer(0);
+
+ /**
+ * The last value.
+ */
+ private Number lastValue = null;
+
+ /**
+ * The derived gauge timeStamp.
+ */
+ private long derivedGaugeTimeStamp = 0;
+
+ /**
+ * The offset.
+ */
+ Number offset = new Integer(0);
+
+ /**
+ * The modulus.
+ */
+ Number modulus = new Integer(0);
+
+ /**
+ * The threshold.
+ */
+ Number threshold = new Integer(0);
+
+ /**
+ * The last stated threshold.
+ */
+ Number initialThreshold = new Integer(0);
+
+ /**
+ * Difference mode.
+ */
+ boolean differenceMode = false;
+
+ /**
+ * Notify.
+ */
+ boolean notify = false;
+
+ // Static --------------------------------------------------------
+
+ // Constructors --------------------------------------------------
+
+ /**
+ * Default Constructor
+ */
+ public CounterMonitor()
+ {
+ dbgTag = "CounterMonitor";
+ }
+
+ // Public --------------------------------------------------------
+
+ public MBeanNotificationInfo[] getNotificationInfo()
+ {
+ MBeanNotificationInfo[] result = new MBeanNotificationInfo[1];
+ String[] types = new String[]
+ {
+ MonitorNotification.RUNTIME_ERROR,
+ MonitorNotification.OBSERVED_OBJECT_ERROR,
+ MonitorNotification.OBSERVED_ATTRIBUTE_ERROR,
+ MonitorNotification.OBSERVED_ATTRIBUTE_TYPE_ERROR,
+ MonitorNotification.THRESHOLD_ERROR,
+ MonitorNotification.THRESHOLD_VALUE_EXCEEDED
+ };
+ result[0] = new MBeanNotificationInfo(types,
+ "javax.management.monitor.MonitorNotification",
+ "Notifications sent by the Counter Monitor Service MBean");
+ return result;
+ }
+
+ // CounterMonitorMBean implementation ----------------------------
+
+ public Number getDerivedGauge()
+ {
+ return derivedGauge;
+ }
+
+ public long getDerivedGaugeTimeStamp()
+ {
+ return derivedGaugeTimeStamp;
+ }
+
+ public boolean getDifferenceMode()
+ {
+ return differenceMode;
+ }
+
+ public void setDifferenceMode(boolean value)
+ {
+ differenceMode = value;
+ }
+
+ public Number getModulus()
+ {
+ return modulus;
+ }
+
+ public void setModulus(Number value)
+ throws IllegalArgumentException
+ {
+ if (value == null)
+ throw new IllegalArgumentException("Null modulus");
+ if (value.longValue() < 0)
+ throw new IllegalArgumentException("Negative modulus");
+ modulus = value;
+ alreadyNotified = RESET_FLAGS_ALREADY_NOTIFIED;
+ }
+
+ public boolean getNotify()
+ {
+ return notify;
+ }
+
+ public void setNotify(boolean value)
+ {
+ notify = value;
+ }
+
+ public Number getOffset()
+ {
+ return offset;
+ }
+
+ public void setOffset(Number value)
+ throws IllegalArgumentException
+ {
+ if (value == null)
+ throw new IllegalArgumentException("Null offset");
+ if (value.longValue() < 0)
+ throw new IllegalArgumentException("Negative offset");
+ offset = value;
+ alreadyNotified = RESET_FLAGS_ALREADY_NOTIFIED;
+ }
+
+ public Number getThreshold()
+ {
+ return threshold;
+ }
+
+ public void setThreshold(Number value)
+ throws IllegalArgumentException
+ {
+ if (value == null)
+ throw new IllegalArgumentException("Null threshold");
+ if (value.longValue() < 0)
+ throw new IllegalArgumentException("Negative threshold");
+ threshold = value;
+ initialThreshold = value;
+ alreadyNotified = RESET_FLAGS_ALREADY_NOTIFIED;
+ }
+
+ // Override start to reset the last value for difference mode and
+ // to get the initial gauge.
+ public synchronized void start()
+ {
+ lastValue = null;
+ derivedGauge = new Integer(0);
+ derivedGaugeTimeStamp = System.currentTimeMillis();
+ super.start();
+ }
+
+ // Package protected ---------------------------------------------
+
+ // REVIEW: This works but needs tidying up!
+ void monitor(MBeanAttributeInfo attributeInfo, Object value)
+ throws Exception
+ {
+ // Wrong type of attribute
+ if (!(value instanceof Byte) && !(value instanceof Integer) &&
+ !(value instanceof Short) && !(value instanceof Long))
+ {
+ sendAttributeTypeErrorNotification("Attribute is not an integer type");
+ return;
+ }
+
+ // Wrong threshold types
+ if (threshold.getClass() != value.getClass()
+ || offset.longValue() != 0 && offset.getClass() != value.getClass()
+ || modulus.longValue() != 0 && modulus.getClass() != value.getClass())
+ {
+ sendThresholdErrorNotification(value);
+ return;
+ }
+
+ // Cast the counter to a Number
+ Number number = (Number) value;
+
+ // Get the gauge and record when we got it.
+ if (differenceMode)
+ {
+ if (lastValue == null)
+ derivedGauge = getZero(number);
+ else
+ derivedGauge = sub(number, lastValue);
+ if (derivedGauge.longValue() < 0 && modulus.longValue() != 0)
+ derivedGauge = add(derivedGauge, modulus);
+ }
+ else
+ derivedGauge = number;
+ derivedGaugeTimeStamp = System.currentTimeMillis();
+
+ // Fire the event if the threshold has been exceeded
+ if (derivedGauge.longValue() >= threshold.longValue())
+ {
+ if ((alreadyNotified & THRESHOLD_EXCEEDED_NOTIFIED) == 0)
+ {
+ sendThresholdExceededNotification(derivedGauge);
+ alreadyNotified |= THRESHOLD_EXCEEDED_NOTIFIED;
+
+ // Add any offsets required to get a new threshold
+ if (offset.longValue() != 0)
+ {
+ while(threshold.longValue() <= derivedGauge.longValue())
+ threshold = add(threshold, offset);
+ alreadyNotified &= ~THRESHOLD_EXCEEDED_NOTIFIED;
+ }
+ }
+ }
+ else
+ {
+ // Reset notfication when it becomes less than threshold
+ if (derivedGauge.longValue() < threshold.longValue()
+ && offset.longValue() == 0)
+ alreadyNotified &= ~THRESHOLD_EXCEEDED_NOTIFIED;
+ }
+
+ // For difference mode, restart when the counter decreases
+ if (differenceMode == true && lastValue !=null &&
+ lastValue.longValue() > number.longValue())
+ {
+ threshold = initialThreshold;
+ alreadyNotified &= ~THRESHOLD_EXCEEDED_NOTIFIED;
+ }
+
+ // For normal mode, restart when modulus exceeded
+ if (differenceMode == false && modulus.longValue() != 0 &&
+ number.longValue() > modulus.longValue())
+ {
+ threshold = initialThreshold;
+ alreadyNotified &= ~THRESHOLD_EXCEEDED_NOTIFIED;
+ }
+
+ // Remember the last value
+ lastValue = number;
+ }
+
+ /**
+ * Get zero for the type passed.
+ *
+ * @param the reference object
+ * @return zero for the correct type
+ */
+ Number getZero(Number value)
+ {
+ if (value instanceof Byte)
+ return new Byte((byte) 0);
+ if (value instanceof Integer)
+ return new Integer(0);
+ if (value instanceof Short)
+ return new Short((short) 0);
+ return new Long(0);
+ }
+
+ /**
+ * Add two numbers together.
+ * @param value1 the first value.
+ * @param value2 the second value.
+ * @return value1 + value2 of the correct type
+ */
+ Number add(Number value1, Number value2)
+ {
+ if (value1 instanceof Byte)
+ return new Byte((byte) (value1.byteValue() + value2.byteValue()));
+ if (value1 instanceof Integer)
+ return new Integer(value1.intValue() + value2.intValue());
+ if (value1 instanceof Short)
+ return new Short((short) (value1.shortValue() + value2.shortValue()));
+ return new Long(value1.longValue() + value2.longValue());
+ }
+
+ /**
+ * Subtract two numbers.
+ * @param value1 the first value.
+ * @param value2 the second value.
+ * @return value1 - value2 of the correct type
+ */
+ Number sub(Number value1, Number value2)
+ {
+ if (value1 instanceof Byte)
+ return new Byte((byte) (value1.byteValue() - value2.byteValue()));
+ if (value1 instanceof Integer)
+ return new Integer(value1.intValue() - value2.intValue());
+ if (value1 instanceof Short)
+ return new Short((short) (value1.shortValue() - value2.shortValue()));
+ return new Long(value1.longValue() - value2.longValue());
+ }
+
+ /**
+ * Send a threshold exceeded event.<p>
+ *
+ * This is only performed when requested and it has not already been sent.
+ *
+ * @param value the attribute value.
+ */
+ void sendThresholdExceededNotification(Object value)
+ {
+ if (notify)
+ {
+ sendNotification(MonitorNotification.THRESHOLD_VALUE_EXCEEDED,
+ derivedGaugeTimeStamp, "threshold exceeded", observedAttribute, value,
+ threshold);
+ }
+ }
+
+ /**
+ * Send a threshold error event.<p>
+ *
+ * This is only performed when requested and it has not already been sent.
+ *
+ * @param value the attribute value.
+ */
+ void sendThresholdErrorNotification(Object value)
+ {
+ if ((alreadyNotified & THRESHOLD_ERROR_NOTIFIED) == 0)
+ {
+ sendNotification(MonitorNotification.THRESHOLD_ERROR,
+ derivedGaugeTimeStamp,
+ "Threshold, offset or modulus not the correct type",
+ observedAttribute, null, null);
+ alreadyNotified |= THRESHOLD_ERROR_NOTIFIED;
+ }
+ }
+
+ // Protected -----------------------------------------------------
+
+ // Private -------------------------------------------------------
+
+ // Inner classes -------------------------------------------------
+}
1.4 +18 -5 jmx/src/main/javax/management/monitor/Monitor.java
Index: Monitor.java
===================================================================
RCS file: /cvsroot/jboss/jmx/src/main/javax/management/monitor/Monitor.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Monitor.java 20 Jan 2002 14:30:40 -0000 1.3
+++ Monitor.java 24 Mar 2002 13:12:12 -0000 1.4
@@ -26,9 +26,14 @@
/**
* The monitor service.
*
+ * <p><b>Revisions:</b>
+ * <p><b>20020319 Adrian Brock:</b>
+ * <ul>
+ * <li>Notify using the object name and fix the notification payloads
+ * </ul>
+ *
* @author <a href="mailto:[EMAIL PROTECTED]">Adrian Brock</a>
* @version $Revision$
- *
*/
public abstract class Monitor
extends NotificationBroadcasterSupport
@@ -94,6 +99,11 @@
protected MBeanServer server;
/**
+ * The object name of this monitor.
+ */
+ ObjectName objectName;
+
+ /**
* The errors that have already been notified.
* REVIEW: Check
*/
@@ -244,6 +254,9 @@
// Remember the server.
this.server = server;
+ // Remember the object name.
+ this.objectName = objectName;
+
// Use the passed object name.
return objectName;
}
@@ -373,7 +386,7 @@
}
if (timestamp == 0)
timestamp = System.currentTimeMillis();
- sendNotification(new MonitorNotification(type, this, seq,
+ sendNotification(new MonitorNotification(type, objectName, seq,
timestamp, message, gauge,
attribute, observedObject, trigger));
}
@@ -387,7 +400,7 @@
{
if ((alreadyNotified & RUNTIME_ERROR_NOTIFIED) == 0)
sendNotification(MonitorNotification.RUNTIME_ERROR, 0,
- message, null, null, null);
+ message, observedAttribute, null, null);
alreadyNotified |= RUNTIME_ERROR_NOTIFIED;
}
@@ -400,7 +413,7 @@
{
if ((alreadyNotified & OBSERVED_OBJECT_ERROR_NOTIFIED) == 0)
sendNotification(MonitorNotification.OBSERVED_OBJECT_ERROR, 0,
- message, null, null, null);
+ message, observedAttribute, null, null);
alreadyNotified |= OBSERVED_OBJECT_ERROR_NOTIFIED;
}
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development