Methods Summary |
---|
synchronized javax.management.monitor.MonitorNotification | buildAlarmNotification(javax.management.ObjectName object, java.lang.String attribute, java.lang.Comparable value)
final GaugeMonitorObservedObject o =
(GaugeMonitorObservedObject) getObservedObject(object);
if (o == null)
return null;
// Notify the listeners if the updated derived
// gauge value is valid.
//
final MonitorNotification alarm;
if (o.getDerivedGaugeValid())
alarm = updateNotifications(o);
else
alarm = null;
return alarm;
|
ObservedObject | createObservedObject(javax.management.ObjectName object)Factory method for ObservedObject creation.
final GaugeMonitorObservedObject gmo =
new GaugeMonitorObservedObject(object);
gmo.setStatus(RISING_OR_FALLING);
gmo.setPreviousScanGauge(null);
return gmo;
|
public synchronized java.lang.Number | getDerivedGauge(javax.management.ObjectName object)Gets the derived gauge of the specified object, if this object is
contained in the set of observed MBeans, or null otherwise.
return (Number) super.getDerivedGauge(object);
|
public synchronized java.lang.Number | getDerivedGauge()Returns the derived gauge of the first object in the set of
observed MBeans.
if (observedObjects.isEmpty()) {
return null;
} else {
return (Number) observedObjects.get(0).getDerivedGauge();
}
|
synchronized java.lang.Comparable | getDerivedGaugeFromComparable(javax.management.ObjectName object, java.lang.String attribute, java.lang.Comparable value)
final GaugeMonitorObservedObject o =
(GaugeMonitorObservedObject) getObservedObject(object);
if (o == null)
return null;
// Update the derived gauge attributes and check the
// validity of the new value. The derived gauge value
// is invalid when the differenceMode flag is set to
// true and it is the first notification, i.e. we
// haven't got 2 consecutive values to update the
// derived gauge.
//
o.setDerivedGaugeValid(updateDerivedGauge(value, o));
return (Comparable<?>) o.getDerivedGauge();
|
public synchronized long | getDerivedGaugeTimeStamp(javax.management.ObjectName object)Gets the derived gauge timestamp of the specified object, if
this object is contained in the set of observed MBeans, or
0 otherwise.
return super.getDerivedGaugeTimeStamp(object);
|
public synchronized long | getDerivedGaugeTimeStamp()Gets the derived gauge timestamp of the first object in the set
of observed MBeans.
if (observedObjects.isEmpty()) {
return 0;
} else {
return observedObjects.get(0).getDerivedGaugeTimeStamp();
}
|
public synchronized boolean | getDifferenceMode()Gets the difference mode flag value common to all observed MBeans.
return differenceMode;
|
public synchronized java.lang.Number | getHighThreshold()Gets the high threshold value common to all observed MBeans.
return highThreshold;
|
public synchronized java.lang.Number | getLowThreshold()Gets the low threshold value common to all observed MBeans.
return lowThreshold;
|
public javax.management.MBeanNotificationInfo[] | getNotificationInfo()Returns a NotificationInfo object containing the
name of the Java class of the notification and the notification
types sent by the gauge monitor.
return notifsInfo;
|
public synchronized boolean | getNotifyHigh()Gets the high notification's on/off switch value common to all
observed MBeans.
return notifyHigh;
|
public synchronized boolean | getNotifyLow()Gets the low notification's on/off switch value common to all
observed MBeans.
return notifyLow;
|
synchronized boolean | isComparableTypeValid(javax.management.ObjectName object, java.lang.String attribute, java.lang.Comparable value)This method globally sets the derived gauge type for the given
"object" and "attribute" after checking that the type of the
supplied observed attribute value is one of the value types
supported by this monitor.
final GaugeMonitorObservedObject o =
(GaugeMonitorObservedObject) getObservedObject(object);
if (o == null)
return false;
// Check that the observed attribute is either of type
// "Integer" or "Float".
//
if (value instanceof Integer) {
o.setType(INTEGER);
} else if (value instanceof Byte) {
o.setType(BYTE);
} else if (value instanceof Short) {
o.setType(SHORT);
} else if (value instanceof Long) {
o.setType(LONG);
} else if (value instanceof Float) {
o.setType(FLOAT);
} else if (value instanceof Double) {
o.setType(DOUBLE);
} else {
return false;
}
return true;
|
private boolean | isFirstGreaterThanLast(java.lang.Number greater, java.lang.Number less, NumericalType type)Tests if the first specified Number is greater than or equal to
the last. Both integer and floating-point types are allowed.
switch (type) {
case INTEGER:
case BYTE:
case SHORT:
case LONG:
return (greater.longValue() >= less.longValue());
case FLOAT:
case DOUBLE:
return (greater.doubleValue() >= less.doubleValue());
default:
// Should never occur...
if (isDebugOn()) {
debug("isFirstGreaterThanLast",
"the threshold type is invalid");
}
return false;
}
|
private boolean | isFirstStrictlyGreaterThanLast(java.lang.Number greater, java.lang.Number less, java.lang.String className)Tests if the first specified Number is strictly greater than the last.
Both integer and floating-point types are allowed.
if (className.equals("java.lang.Integer") ||
className.equals("java.lang.Byte") ||
className.equals("java.lang.Short") ||
className.equals("java.lang.Long")) {
return (greater.longValue() > less.longValue());
}
else if (className.equals("java.lang.Float") ||
className.equals("java.lang.Double")) {
return (greater.doubleValue() > less.doubleValue());
}
else {
// Should never occur...
if (isDebugOn()) {
debug("isFirstStrictlyGreaterThanLast",
"the threshold type is invalid");
}
return false;
}
|
synchronized boolean | isThresholdTypeValid(javax.management.ObjectName object, java.lang.String attribute, java.lang.Comparable value)Tests if the threshold high and threshold low are both of the
same type as the gauge. Both integer and floating-point types
are allowed.
Note:
If the optional lowThreshold or highThreshold have not been
initialized, their default value is an Integer object with
a value equal to zero.
final GaugeMonitorObservedObject o =
(GaugeMonitorObservedObject) getObservedObject(object);
if (o == null)
return false;
Class<? extends Number> c = classForType(o.getType());
return (isValidForType(highThreshold, c) &&
isValidForType(lowThreshold, c));
|
java.lang.String | makeDebugTag()
// TRACES & DEBUG
//---------------
return "GaugeMonitor";
|
synchronized void | onErrorNotification(javax.management.monitor.MonitorNotification notification)
final GaugeMonitorObservedObject o = (GaugeMonitorObservedObject)
getObservedObject(notification.getObservedObject());
if (o == null)
return;
// Reset values.
//
o.setStatus(RISING_OR_FALLING);
o.setPreviousScanGauge(null);
|
private synchronized void | setDerivedGaugeWithDifference(java.lang.Number scanGauge, javax.management.monitor.GaugeMonitor$GaugeMonitorObservedObject o)Sets the derived gauge when the differenceMode flag is set to
true . Both integer and floating-point types are
allowed.
Number prev = o.getPreviousScanGauge();
Number der;
switch (o.getType()) {
case INTEGER:
der = new Integer(((Integer)scanGauge).intValue() -
((Integer)prev).intValue());
break;
case BYTE:
der = new Byte((byte)(((Byte)scanGauge).byteValue() -
((Byte)prev).byteValue()));
break;
case SHORT:
der = new Short((short)(((Short)scanGauge).shortValue() -
((Short)prev).shortValue()));
break;
case LONG:
der = new Long(((Long)scanGauge).longValue() -
((Long)prev).longValue());
break;
case FLOAT:
der = new Float(((Float)scanGauge).floatValue() -
((Float)prev).floatValue());
break;
case DOUBLE:
der = new Double(((Double)scanGauge).doubleValue() -
((Double)prev).doubleValue());
break;
default:
// Should never occur...
if (isDebugOn()) {
debug("setDerivedGaugeWithDifference",
"the threshold type is invalid");
}
return;
}
o.setDerivedGauge(der);
|
public synchronized void | setDifferenceMode(boolean value)Sets the difference mode flag value common to all observed MBeans.
if (differenceMode == value)
return;
differenceMode = value;
// Reset values.
//
for (ObservedObject o : observedObjects) {
final GaugeMonitorObservedObject gmo =
(GaugeMonitorObservedObject) o;
gmo.setStatus(RISING_OR_FALLING);
gmo.setPreviousScanGauge(null);
}
|
public synchronized void | setNotifyHigh(boolean value)Sets the high notification's on/off switch value common to all
observed MBeans.
if (notifyHigh == value)
return;
notifyHigh = value;
|
public synchronized void | setNotifyLow(boolean value)Sets the low notification's on/off switch value common to all
observed MBeans.
if (notifyLow == value)
return;
notifyLow = value;
|
public synchronized void | setThresholds(java.lang.Number highValue, java.lang.Number lowValue)Sets the high and the low threshold values common to all
observed MBeans.
if ((highValue == null) || (lowValue == null)) {
throw new IllegalArgumentException("Null threshold value");
}
if (highValue.getClass() != lowValue.getClass()) {
throw new IllegalArgumentException("Different type " +
"threshold values");
}
if (isFirstStrictlyGreaterThanLast(lowValue, highValue,
highValue.getClass().getName())) {
throw new IllegalArgumentException("High threshold less than " +
"low threshold");
}
if (highThreshold.equals(highValue) && lowThreshold.equals(lowValue))
return;
highThreshold = highValue;
lowThreshold = lowValue;
// Reset values.
//
int index = 0;
for (ObservedObject o : observedObjects) {
resetAlreadyNotified(o, index++, THRESHOLD_ERROR_NOTIFIED);
final GaugeMonitorObservedObject gmo =
(GaugeMonitorObservedObject) o;
gmo.setStatus(RISING_OR_FALLING);
}
|
public synchronized void | start()Starts the gauge monitor.
if (isActive()) {
if (isTraceOn()) {
trace("start", "the monitor is already active");
}
return;
}
// Reset values.
//
for (ObservedObject o : observedObjects) {
final GaugeMonitorObservedObject gmo =
(GaugeMonitorObservedObject) o;
gmo.setStatus(RISING_OR_FALLING);
gmo.setPreviousScanGauge(null);
}
doStart();
|
public synchronized void | stop()Stops the gauge monitor.
doStop();
|
private synchronized boolean | updateDerivedGauge(java.lang.Object scanGauge, javax.management.monitor.GaugeMonitor$GaugeMonitorObservedObject o)Updates the derived gauge attribute of the observed object.
boolean is_derived_gauge_valid;
// The gauge difference mode is used.
//
if (differenceMode) {
// The previous scan gauge has been initialized.
//
if (o.getPreviousScanGauge() != null) {
setDerivedGaugeWithDifference((Number)scanGauge, o);
is_derived_gauge_valid = true;
}
// The previous scan gauge has not been initialized.
// We cannot update the derived gauge...
//
else {
is_derived_gauge_valid = false;
}
o.setPreviousScanGauge((Number)scanGauge);
}
// The gauge difference mode is not used.
//
else {
o.setDerivedGauge((Number)scanGauge);
is_derived_gauge_valid = true;
}
return is_derived_gauge_valid;
|
private synchronized javax.management.monitor.MonitorNotification | updateNotifications(javax.management.monitor.GaugeMonitor$GaugeMonitorObservedObject o)Updates the notification attribute of the observed object
and notifies the listeners only once if the notify flag
is set to true .
MonitorNotification n = null;
// Send high notification if notifyHigh is true.
// Send low notification if notifyLow is true.
//
if (o.getStatus() == RISING_OR_FALLING) {
if (isFirstGreaterThanLast((Number)o.getDerivedGauge(),
highThreshold,
o.getType())) {
if (notifyHigh) {
n = new MonitorNotification(
THRESHOLD_HIGH_VALUE_EXCEEDED,
this,
0,
0,
"",
null,
null,
null,
highThreshold);
}
o.setStatus(FALLING);
} else if (isFirstGreaterThanLast(lowThreshold,
(Number)o.getDerivedGauge(),
o.getType())) {
if (notifyLow) {
n = new MonitorNotification(
THRESHOLD_LOW_VALUE_EXCEEDED,
this,
0,
0,
"",
null,
null,
null,
lowThreshold);
}
o.setStatus(RISING);
}
} else {
if (o.getStatus() == RISING) {
if (isFirstGreaterThanLast((Number)o.getDerivedGauge(),
highThreshold,
o.getType())) {
if (notifyHigh) {
n = new MonitorNotification(
THRESHOLD_HIGH_VALUE_EXCEEDED,
this,
0,
0,
"",
null,
null,
null,
highThreshold);
}
o.setStatus(FALLING);
}
} else if (o.getStatus() == FALLING) {
if (isFirstGreaterThanLast(lowThreshold,
(Number)o.getDerivedGauge(),
o.getType())) {
if (notifyLow) {
n = new MonitorNotification(
THRESHOLD_LOW_VALUE_EXCEEDED,
this,
0,
0,
"",
null,
null,
null,
lowThreshold);
}
o.setStatus(RISING);
}
}
}
return n;
|