From 6662294a7f679c31b12b1f10003cf28d02f625f1 Mon Sep 17 00:00:00 2001
From: Bjoern Martin Creates a new instance of this class. The Sigar instance is stored (and
- * accessible) via the {@link #sigarImpl} member. A second instance is
- * stored within the {@link #sigar} member which is either {@link #sigarImpl}
- * or an instance of {@link SigarProxyCache} with the expiration time set to
- * whatever the The following cache modes exist: Note: Only make use of the cacheless or half second mode if you
- * know what you are doing. They may have impact on system performance if
- * used excessively. Creates a new instance of this class. The Sigar instance is stored (and
+ * accessible) via the {@link #sigarImpl} member. A second instance is
+ * stored within the {@link #sigar} member which is either {@link #sigarImpl}
+ * or an instance of {@link SigarProxyCache} with the expiration time set to
+ * whatever the The following cache modes exist: Note: Only make use of the cacheless or half second mode if you
+ * know what you are doing. They may have impact on system performance if
+ * used excessively. Returns Note: Make sure any subclass does a super call to this method,
- * otherwise the implementation might be broken. Note: Make sure any subclass does a super call to this method,
- * otherwise the implementation might be broken. Note: Make sure any subclass does a super call to this method,
- * otherwise the implementation might be broken. Note: Make sure any subclass does a super call to this method,
- * otherwise the implementation might be broken. Returns Note: Make sure any subclass does a super call to this method,
+ * otherwise the implementation might be broken. Note: Make sure any subclass does a super call to this method,
+ * otherwise the implementation might be broken. Note: Make sure any subclass does a super call to this method,
+ * otherwise the implementation might be broken. Note: Make sure any subclass does a super call to this method,
+ * otherwise the implementation might be broken.null
when
- * the deregistration finished.
- *
- * @see #preRegister(MBeanServer, ObjectName)
- * @see #postDeregister()
- */
- protected MBeanServer mbeanServer;
+ /**
+ * The MBean server this MBean is registered to. Set during the MBean's
+ * registration to the MBean server and unset to null
when
+ * the deregistration finished.
+ *
+ * @see #preRegister(MBeanServer, ObjectName)
+ * @see #postDeregister()
+ */
+ protected MBeanServer mbeanServer;
- /**
- * cacheMode
parameter specifies.
- *
- *
- *
- * Constant Description
- * {@link #CACHELESS} No cached instance, {@link #sigar}
- * ==
{@link #sigarImpl}.
- * {@link #CACHED_500MS} 500 millisecond cache, for high
- * frequency queries on raw data such as reading out CPU timers each
- * second. Avoids reading out multiple data sets when all attributes of
- * an MBean are queried in short sequence.
- * {@link #CACHED_5SEC} 5 second cache, for high frequency
- * queries on calculated data such as CPU percentages.
- * {@link #CACHED_30SEC} 30 second cache, for normal queries
- * or data readouts such as CPU model / vendor. This is the default if
- * nothing ( 0
) is specified.
- * {@link #DEFAULT} Same as {@link #CACHED_30SEC}. null
- * @param cacheMode The cache mode to use for {@link #sigar} or {@link #CACHELESS}
- * if no separate, cached instance is to be maintained.
- */
- protected AbstractMBean(Sigar sigar, short cacheMode) {
- // store Sigar
- this.sigarImpl = sigar;
-
- // create a cached instance as well
- if (cacheMode == CACHELESS) {
- // no cached version
- this.sigar = this.sigarImpl;
-
- } else if (cacheMode == CACHED_500MS) {
- // 500ms cached version (for 1/sec queries)
- this.sigar = SigarProxyCache.newInstance(this.sigarImpl,
- 500);
-
- } else if (cacheMode == CACHED_5SEC) {
- // 5sec cached version (for avg'd queries)
- this.sigar = SigarProxyCache.newInstance(this.sigarImpl,
- 5000);
-
- } else /* if (cacheMode == CACHED_30SEC) */ {
- // 30sec (default) cached version (for info and long term queries)
- this.sigar = SigarProxyCache.newInstance(this.sigarImpl,
- 30000);
- }
- }
+ /**
+ * cacheMode
parameter specifies.
+ *
+ *
+ *
+ * Constant Description
+ * {@link #CACHELESS} No cached instance, {@link #sigar}
+ * ==
{@link #sigarImpl}.
+ * {@link #CACHED_500MS} 500 millisecond cache, for high
+ * frequency queries on raw data such as reading out CPU timers each
+ * second. Avoids reading out multiple data sets when all attributes of
+ * an MBean are queried in short sequence.
+ * {@link #CACHED_5SEC} 5 second cache, for high frequency
+ * queries on calculated data such as CPU percentages.
+ * {@link #CACHED_30SEC} 30 second cache, for normal queries
+ * or data readouts such as CPU model / vendor. This is the default if
+ * nothing ( 0
) is specified.
+ * {@link #DEFAULT} Same as {@link #CACHED_30SEC}. null
+ * @param cacheMode The cache mode to use for {@link #sigar} or {@link #CACHELESS}
+ * if no separate, cached instance is to be maintained.
+ */
+ protected AbstractMBean(Sigar sigar, short cacheMode) {
+ // store Sigar
+ this.sigarImpl = sigar;
- /**
- * Returns the object name the MBean is registered with within the
- * MBeanServer. May be null
in case the instance is not
- * registered to an MBeanServer, but used standalone.
- *
- * @return The object name or null
if not registered to an
- * MBeanServer
- */
- public abstract String getObjectName();
+ // create a cached instance as well
+ if (cacheMode == CACHELESS) {
+ // no cached version
+ this.sigar = this.sigarImpl;
- /**
- * Returns a runtime exception for the type and SigarException specified.
- *
- * @param type
- * The type that was called
- * @param e
- * The exception that was raised
- * @return A runtime exception encapsulating the information specified
- */
- protected RuntimeException unexpectedError(String type, SigarException e) {
- String msg = "Unexected error in Sigar.get" + type + ": "
- + e.getMessage();
- return new IllegalArgumentException(msg);
- }
+ } else if (cacheMode == CACHED_500MS) {
+ // 500ms cached version (for 1/sec queries)
+ this.sigar = SigarProxyCache.newInstance(this.sigarImpl, 500);
- /**
- * Loops over all attributes and calls
- * {@link DynamicMBean#getAttribute(java.lang.String)} method for each
- * attribute sequentially. Any exception thrown by those methods are ignored
- * and simply cause the attribute not being added to the result.
- */
- public AttributeList getAttributes(String[] attrs) {
- final AttributeList result = new AttributeList();
- for (int i = 0; i < attrs.length; i++) {
- try {
- result.add(new Attribute(attrs[i], getAttribute(attrs[i])));
- } catch (AttributeNotFoundException e) {
- // ignore, as we cannot throw this exception
- } catch (MBeanException e) {
- // ignore, as we cannot throw this exception
- } catch (ReflectionException e) {
- // ignore, as we cannot throw this exception
- }
- }
- return result;
- }
+ } else if (cacheMode == CACHED_5SEC) {
+ // 5sec cached version (for avg'd queries)
+ this.sigar = SigarProxyCache.newInstance(this.sigarImpl, 5000);
- /**
- * Loops over all attributes and calls
- * {@link DynamicMBean#setAttribute(Attribute)} for each attribute
- * sequentially. Any exception thrown by those methods are ignored and
- * simply cause the attribute not being added to the result.
- */
- public AttributeList setAttributes(AttributeList attrs) {
- final AttributeList result = new AttributeList();
- for (int i = 0; i < attrs.size(); i++) {
- try {
- final Attribute next = (Attribute) attrs.get(i);
- setAttribute(next);
- result.add(next);
- } catch (AttributeNotFoundException e) {
- // ignore, as we cannot throw this exception
- } catch (InvalidAttributeValueException e) {
- // ignore, as we cannot throw this exception
- } catch (MBeanException e) {
- // ignore, as we cannot throw this exception
- } catch (ReflectionException e) {
- // ignore, as we cannot throw this exception
- }
- }
- return result;
- }
+ } else /* if (cacheMode == CACHED_30SEC) */{
+ // 30sec (default) cached version (for info and long term queries)
+ this.sigar = SigarProxyCache.newInstance(this.sigarImpl, 30000);
+ }
+ }
+ /**
+ * Returns the object name the MBean is registered with within the
+ * MBeanServer. May be null
in case the instance is not
+ * registered to an MBeanServer, but used standalone.
+ *
+ * @return The object name or null
if not registered to an
+ * MBeanServer
+ */
+ public abstract String getObjectName();
-
- // -------
- // Implementation of the MBeanRegistration interface
- // -------
-
- /**
- * new ObjectName(this.getObjectName())
to guarantee
- * a reliable and reproducable object name.new ObjectName(this.getObjectName())
to guarantee
+ * a reliable and reproducable object name.Cpu
information package.
- * Provides an OpenMBean conform implementation.
+ * Sigar JMX MBean implementation for the Cpu
information
+ * package. Provides an OpenMBean conform implementation.
*
* @author Bjoern Martin
- * @since 1.4 (2007-04)
+ * @since 1.5
*/
public class SigarCpu extends AbstractMBean {
- private static final String MBEAN_TYPE = "CpuList";
+ private static final String MBEAN_TYPE = "CpuList";
- private static final MBeanInfo MBEAN_INFO;
-
- private static final MBeanAttributeInfo MBEAN_ATTR_CPUINDEX;
+ private static final MBeanInfo MBEAN_INFO;
- private static final MBeanAttributeInfo MBEAN_ATTR_IDLE;
+ private static final MBeanAttributeInfo MBEAN_ATTR_CPUINDEX;
- private static final MBeanAttributeInfo MBEAN_ATTR_NICE;
+ private static final MBeanAttributeInfo MBEAN_ATTR_IDLE;
- private static final MBeanAttributeInfo MBEAN_ATTR_SYS;
+ private static final MBeanAttributeInfo MBEAN_ATTR_NICE;
- private static final MBeanAttributeInfo MBEAN_ATTR_TOTAL;
+ private static final MBeanAttributeInfo MBEAN_ATTR_SYS;
- private static final MBeanAttributeInfo MBEAN_ATTR_USER;
+ private static final MBeanAttributeInfo MBEAN_ATTR_TOTAL;
- private static final MBeanAttributeInfo MBEAN_ATTR_WAIT;
+ private static final MBeanAttributeInfo MBEAN_ATTR_USER;
- private static final MBeanConstructorInfo MBEAN_CONSTR_CPUINDEX;
+ private static final MBeanAttributeInfo MBEAN_ATTR_WAIT;
- private static final MBeanConstructorInfo MBEAN_CONSTR_CPUINDEX_SIGAR;
+ private static final MBeanConstructorInfo MBEAN_CONSTR_CPUINDEX;
- private static MBeanParameterInfo MBEAN_PARAM_CPUINDEX;
+ private static final MBeanConstructorInfo MBEAN_CONSTR_CPUINDEX_SIGAR;
- private static MBeanParameterInfo MBEAN_PARAM_SIGAR;
-
- static {
- MBEAN_ATTR_CPUINDEX = new MBeanAttributeInfo(
- "CpuIndex", "int",
- "The index of the CPU, typically starting at 0",
- true, false, false);
- MBEAN_ATTR_IDLE = new MBeanAttributeInfo(
- "Idle", "long",
- "The idle time of the CPU, in [ms]",
- true, false, false);
- MBEAN_ATTR_NICE = new MBeanAttributeInfo(
- "Nice", "long",
- "The time of the CPU spent on nice priority, in [ms]",
- true, false, false);
- MBEAN_ATTR_SYS = new MBeanAttributeInfo(
- "Sys", "long",
- "The time of the CPU used by the system, in [ms]",
- true, false, false);
- MBEAN_ATTR_TOTAL = new MBeanAttributeInfo(
- "Total", "long",
- "The total time of the CPU, in [ms]",
- true, false, false);
- MBEAN_ATTR_USER = new MBeanAttributeInfo(
- "User", "long",
- "The time of the CPU used by user processes, in [ms]",
- true, false, false);
- MBEAN_ATTR_WAIT = new MBeanAttributeInfo(
- "Wait", "long",
- "The time the CPU had to wait for data to be loaded, in [ms]",
- true, false, false);
- MBEAN_PARAM_CPUINDEX = new MBeanParameterInfo(
- "cpuIndex", "int",
- "The index of the CPU to read data for. Must be >= 0 " +
- "and not exceed the CPU count of the system");
- MBEAN_PARAM_SIGAR = new MBeanParameterInfo(
- "sigar", Sigar.class.getName(),
- "The Sigar instance to use to fetch data from");
- MBEAN_CONSTR_CPUINDEX = new MBeanConstructorInfo(
- SigarCpu.class.getName(),
- "Creates a new instance for the CPU index specified, " +
- "using a new Sigar instance to fetch the data. " +
- "Fails if the CPU index is out of range.",
- new MBeanParameterInfo[]{
- MBEAN_PARAM_CPUINDEX});
- MBEAN_CONSTR_CPUINDEX_SIGAR = new MBeanConstructorInfo(
- SigarCpu.class.getName(),
- "Creates a new instance for the CPU index specified, " +
- "using the Sigar instance specified to fetch the data. " +
- "Fails if the CPU index is out of range.",
- new MBeanParameterInfo[]{
- MBEAN_PARAM_SIGAR,
- MBEAN_PARAM_CPUINDEX});
- MBEAN_INFO = new MBeanInfo(
- SigarCpu.class.getName(),
- "Sigar CPU MBean. Provides raw timing data for a single " +
- "CPU. The data is cached for 500ms, meaning each request " +
- "(and as a result each block request to all parameters) " +
- "within half a second is satisfied from the same dataset.",
- new MBeanAttributeInfo[]{
- MBEAN_ATTR_CPUINDEX,
- MBEAN_ATTR_IDLE,
- MBEAN_ATTR_NICE,
- MBEAN_ATTR_SYS,
- MBEAN_ATTR_TOTAL,
- MBEAN_ATTR_USER,
- MBEAN_ATTR_WAIT},
- new MBeanConstructorInfo[]{
- MBEAN_CONSTR_CPUINDEX,
- MBEAN_CONSTR_CPUINDEX_SIGAR},
- null, null);
-
- }
+ private static MBeanParameterInfo MBEAN_PARAM_CPUINDEX;
- /**
- * Index of the CPU processed by the instance.
- */
- private final int cpuIndex;
+ private static MBeanParameterInfo MBEAN_PARAM_SIGAR;
- /**
- * Object name this instance will give itself when being registered to an
- * MBeanServer.
- */
- private final String objectName;
+ static {
+ MBEAN_ATTR_CPUINDEX = new MBeanAttributeInfo("CpuIndex", "int",
+ "The index of the CPU, typically starting at 0", true, false,
+ false);
+ MBEAN_ATTR_IDLE = new MBeanAttributeInfo("Idle", "long",
+ "The idle time of the CPU, in [ms]", true, false, false);
+ MBEAN_ATTR_NICE = new MBeanAttributeInfo("Nice", "long",
+ "The time of the CPU spent on nice priority, in [ms]", true,
+ false, false);
+ MBEAN_ATTR_SYS = new MBeanAttributeInfo("Sys", "long",
+ "The time of the CPU used by the system, in [ms]", true, false,
+ false);
+ MBEAN_ATTR_TOTAL = new MBeanAttributeInfo("Total", "long",
+ "The total time of the CPU, in [ms]", true, false, false);
+ MBEAN_ATTR_USER = new MBeanAttributeInfo("User", "long",
+ "The time of the CPU used by user processes, in [ms]", true,
+ false, false);
+ MBEAN_ATTR_WAIT = new MBeanAttributeInfo("Wait", "long",
+ "The time the CPU had to wait for data to be loaded, in [ms]",
+ true, false, false);
+ MBEAN_PARAM_CPUINDEX = new MBeanParameterInfo("cpuIndex", "int",
+ "The index of the CPU to read data for. Must be >= 0 "
+ + "and not exceed the CPU count of the system");
+ MBEAN_PARAM_SIGAR = new MBeanParameterInfo("sigar", Sigar.class
+ .getName(), "The Sigar instance to use to fetch data from");
+ MBEAN_CONSTR_CPUINDEX = new MBeanConstructorInfo(SigarCpu.class
+ .getName(),
+ "Creates a new instance for the CPU index specified, "
+ + "using a new Sigar instance to fetch the data. "
+ + "Fails if the CPU index is out of range.",
+ new MBeanParameterInfo[] { MBEAN_PARAM_CPUINDEX });
+ MBEAN_CONSTR_CPUINDEX_SIGAR = new MBeanConstructorInfo(
+ SigarCpu.class.getName(),
+ "Creates a new instance for the CPU index specified, "
+ + "using the Sigar instance specified to fetch the data. "
+ + "Fails if the CPU index is out of range.",
+ new MBeanParameterInfo[] { MBEAN_PARAM_SIGAR,
+ MBEAN_PARAM_CPUINDEX });
+ MBEAN_INFO = new MBeanInfo(
+ SigarCpu.class.getName(),
+ "Sigar CPU MBean. Provides raw timing data for a single "
+ + "CPU. The data is cached for 500ms, meaning each request "
+ + "(and as a result each block request to all parameters) "
+ + "within half a second is satisfied from the same dataset.",
+ new MBeanAttributeInfo[] { MBEAN_ATTR_CPUINDEX,
+ MBEAN_ATTR_IDLE, MBEAN_ATTR_NICE, MBEAN_ATTR_SYS,
+ MBEAN_ATTR_TOTAL, MBEAN_ATTR_USER, MBEAN_ATTR_WAIT },
+ new MBeanConstructorInfo[] { MBEAN_CONSTR_CPUINDEX,
+ MBEAN_CONSTR_CPUINDEX_SIGAR }, null, null);
- /**
- * Creates a new instance for the CPU index specified, using a new Sigar
- * instance to fetch the data. Fails if the CPU index is out of range.
- *
- * @param cpuIndex The index of the CPU to read data for. Must be
- * >= 0
and not exceed the CPU count of the system.
- *
- * @throws IllegalArgumentException If the CPU index is out of range or
- * an unexpected Sigar error occurs
- */
- public SigarCpu(int cpuIndex) throws IllegalArgumentException {
- this(new Sigar(), cpuIndex);
- }
+ }
- /**
- * Creates a new instance for the CPU index specified, using the Sigar
- * instance specified to fetch the data. Fails if the CPU index is out
- * of range.
- *
- * @param sigar The Sigar instance to use to fetch data from
- * @param cpuIndex The index of the CPU to read data for. Must be
- * >= 0
and not exceed the CPU count of the system.
- *
- * @throws IllegalArgumentException If the CPU index is out of range or
- * an unexpected Sigar error occurs
- */
- public SigarCpu(Sigar sigar, int cpuIndex) throws IllegalArgumentException {
- super(sigar, CACHED_500MS);
+ /**
+ * Index of the CPU processed by the instance.
+ */
+ private final int cpuIndex;
- // check index
- if (cpuIndex < 0)
- throw new IllegalArgumentException(
- "CPU index has to be non-negative: " + cpuIndex);
- try {
- int cpuCount;
- if ((cpuCount = sigar.getCpuList().length) < cpuIndex)
- throw new IllegalArgumentException(
- "CPU index out of range (found " + cpuCount + " CPU(s)): " + cpuIndex);
-
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
-
- // all fine
- this.cpuIndex = cpuIndex;
- this.objectName = SigarInvokerJMX.DOMAIN_NAME + ":"
- + MBEAN_ATTR_TYPE + "=Cpu,"
- + MBEAN_ATTR_CPUINDEX.getName().substring(0, 1).toLowerCase()
- + MBEAN_ATTR_CPUINDEX.getName().substring(1) + "=" + cpuIndex;
- }
+ /**
+ * Object name this instance will give itself when being registered to an
+ * MBeanServer.
+ */
+ private final String objectName;
- /**
- * Object name this instance will give itself when being registered to an
- * MBeanServer.
- */
- public String getObjectName() {
- return this.objectName;
- }
-
- /**
- * @return The index of the CPU, typically starting at 0
- */
- public int getCpuIndex() {
- return this.cpuIndex;
- }
-
- /**
- * @return The idle time of the CPU, in [ms]
- */
- public long getIdle() {
- try {
- return sigar.getCpuList()[this.cpuIndex].getIdle();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
-
- /**
- * @return The time of the CPU spent on nice priority, in [ms]
- */
- public long getNice() {
- try {
- return sigar.getCpuList()[this.cpuIndex].getNice();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
-
- /**
- * @return The time of the CPU used by the system, in [ms]
- */
- public long getSys() {
- try {
- return sigar.getCpuList()[this.cpuIndex].getSys();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
-
- /**
- * @return The total time of the CPU, in [ms]
- */
- public long getTotal() {
- try {
- return sigar.getCpuList()[this.cpuIndex].getTotal();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
-
- /**
- * @return The time of the CPU used by user processes, in [ms]
- */
- public long getUser() {
- try {
- return sigar.getCpuList()[this.cpuIndex].getUser();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
-
- /**
- * @return The time the CPU had to wait for data to be loaded, in [ms]
- */
- public long getWait() {
- try {
- return sigar.getCpuList()[this.cpuIndex].getWait();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
+ /**
+ * Creates a new instance for the CPU index specified, using a new Sigar
+ * instance to fetch the data. Fails if the CPU index is out of range.
+ *
+ * @param cpuIndex
+ * The index of the CPU to read data for. Must be >= 0
+ * and not exceed the CPU count of the system.
+ *
+ * @throws IllegalArgumentException
+ * If the CPU index is out of range or an unexpected Sigar error
+ * occurs.
+ */
+ public SigarCpu(int cpuIndex) throws IllegalArgumentException {
+ this(new Sigar(), cpuIndex);
+ }
-
-
- // -------
- // Implementation of the DynamicMBean interface
- // -------
-
- /*
- * (non-Javadoc)
- * @see DynamicMBean#getAttribute(String)
- */
- public Object getAttribute(String attr) throws AttributeNotFoundException {
-
- if (MBEAN_ATTR_CPUINDEX.getName().equals(attr)) {
- return new Integer(getCpuIndex());
-
- } else if (MBEAN_ATTR_IDLE.getName().equals(attr)) {
- return new Long(getIdle());
-
- } else if (MBEAN_ATTR_NICE.getName().equals(attr)) {
- return new Long(getNice());
-
- } else if (MBEAN_ATTR_SYS.getName().equals(attr)) {
- return new Long(getSys());
-
- } else if (MBEAN_ATTR_TOTAL.getName().equals(attr)) {
- return new Long(getTotal());
-
- } else if (MBEAN_ATTR_USER.getName().equals(attr)) {
- return new Long(getUser());
-
- } else if (MBEAN_ATTR_WAIT.getName().equals(attr)) {
- return new Long(getWait());
-
- } else {
- throw new AttributeNotFoundException(attr);
- }
- }
+ /**
+ * Creates a new instance for the CPU index specified, using the Sigar
+ * instance specified to fetch the data. Fails if the CPU index is out of
+ * range.
+ *
+ * @param sigar
+ * The Sigar instance to use to fetch data from
+ * @param cpuIndex
+ * The index of the CPU to read data for. Must be
+ * >= 0
and not exceed the CPU count of the
+ * system.
+ *
+ * @throws IllegalArgumentException
+ * If the CPU index is out of range or an unexpected Sigar error
+ * occurs
+ */
+ public SigarCpu(Sigar sigar, int cpuIndex) throws IllegalArgumentException {
+ super(sigar, CACHED_500MS);
- /*
- * (non-Javadoc)
- * @see DynamicMBean#setAttribute(Attribute)
- */
- public void setAttribute(Attribute attr) throws AttributeNotFoundException {
- throw new AttributeNotFoundException(attr.getName());
- }
+ // check index
+ if (cpuIndex < 0)
+ throw new IllegalArgumentException(
+ "CPU index has to be non-negative: " + cpuIndex);
+ try {
+ int cpuCount;
+ if ((cpuCount = sigar.getCpuList().length) < cpuIndex)
+ throw new IllegalArgumentException(
+ "CPU index out of range (found " + cpuCount
+ + " CPU(s)): " + cpuIndex);
- /*
- * (non-Javadoc)
- * @see DynamicMBean#invoke(String, Object[], String[])
- */
- public Object invoke(String actionName, Object[] params, String[] signature) throws ReflectionException {
- throw new ReflectionException(new NoSuchMethodException(actionName), actionName);
- }
-
- /*
- * (non-Javadoc)
- * @see DynamicMBean#getMBeanInfo()
- */
- public MBeanInfo getMBeanInfo() {
- return MBEAN_INFO;
- }
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+
+ // all fine
+ this.cpuIndex = cpuIndex;
+ this.objectName = SigarInvokerJMX.DOMAIN_NAME + ":" + MBEAN_ATTR_TYPE
+ + "=Cpu,"
+ + MBEAN_ATTR_CPUINDEX.getName().substring(0, 1).toLowerCase()
+ + MBEAN_ATTR_CPUINDEX.getName().substring(1) + "=" + cpuIndex;
+ }
+
+ /**
+ * Object name this instance will give itself when being registered to an
+ * MBeanServer.
+ */
+ public String getObjectName() {
+ return this.objectName;
+ }
+
+ /**
+ * @return The index of the CPU, typically starting at 0
+ */
+ public int getCpuIndex() {
+ return this.cpuIndex;
+ }
+
+ /**
+ * @return The idle time of the CPU, in [ms]
+ */
+ public long getIdle() {
+ try {
+ return sigar.getCpuList()[this.cpuIndex].getIdle();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
+
+ /**
+ * @return The time of the CPU spent on nice priority, in [ms]
+ */
+ public long getNice() {
+ try {
+ return sigar.getCpuList()[this.cpuIndex].getNice();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
+
+ /**
+ * @return The time of the CPU used by the system, in [ms]
+ */
+ public long getSys() {
+ try {
+ return sigar.getCpuList()[this.cpuIndex].getSys();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
+
+ /**
+ * @return The total time of the CPU, in [ms]
+ */
+ public long getTotal() {
+ try {
+ return sigar.getCpuList()[this.cpuIndex].getTotal();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
+
+ /**
+ * @return The time of the CPU used by user processes, in [ms]
+ */
+ public long getUser() {
+ try {
+ return sigar.getCpuList()[this.cpuIndex].getUser();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
+
+ /**
+ * @return The time the CPU had to wait for data to be loaded, in [ms]
+ */
+ public long getWait() {
+ try {
+ return sigar.getCpuList()[this.cpuIndex].getWait();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
+
+ // -------
+ // Implementation of the DynamicMBean interface
+ // -------
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see DynamicMBean#getAttribute(String)
+ */
+ public Object getAttribute(String attr) throws AttributeNotFoundException {
+
+ if (MBEAN_ATTR_CPUINDEX.getName().equals(attr)) {
+ return new Integer(getCpuIndex());
+
+ } else if (MBEAN_ATTR_IDLE.getName().equals(attr)) {
+ return new Long(getIdle());
+
+ } else if (MBEAN_ATTR_NICE.getName().equals(attr)) {
+ return new Long(getNice());
+
+ } else if (MBEAN_ATTR_SYS.getName().equals(attr)) {
+ return new Long(getSys());
+
+ } else if (MBEAN_ATTR_TOTAL.getName().equals(attr)) {
+ return new Long(getTotal());
+
+ } else if (MBEAN_ATTR_USER.getName().equals(attr)) {
+ return new Long(getUser());
+
+ } else if (MBEAN_ATTR_WAIT.getName().equals(attr)) {
+ return new Long(getWait());
+
+ } else {
+ throw new AttributeNotFoundException(attr);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see DynamicMBean#setAttribute(Attribute)
+ */
+ public void setAttribute(Attribute attr) throws AttributeNotFoundException {
+ throw new AttributeNotFoundException(attr.getName());
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see DynamicMBean#invoke(String, Object[], String[])
+ */
+ public Object invoke(String actionName, Object[] params, String[] signature)
+ throws ReflectionException {
+ throw new ReflectionException(new NoSuchMethodException(actionName),
+ actionName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see DynamicMBean#getMBeanInfo()
+ */
+ public MBeanInfo getMBeanInfo() {
+ return MBEAN_INFO;
+ }
}
diff --git a/bindings/java/src/org/hyperic/sigar/jmx/SigarCpuInfo.java b/bindings/java/src/org/hyperic/sigar/jmx/SigarCpuInfo.java
index de051937..500ebed1 100644
--- a/bindings/java/src/org/hyperic/sigar/jmx/SigarCpuInfo.java
+++ b/bindings/java/src/org/hyperic/sigar/jmx/SigarCpuInfo.java
@@ -34,269 +34,253 @@ import org.hyperic.sigar.SigarException;
* package. Provides an OpenMBean conform implementation.
*
* @author Bjoern Martin
- * @since 1.4 (2007-04)
+ * @since 1.5
*/
public class SigarCpuInfo extends AbstractMBean {
- private static final String MBEAN_TYPE = "CpuInfoList";
+ private static final String MBEAN_TYPE = "CpuInfoList";
- private static final MBeanInfo MBEAN_INFO;
-
- private static final MBeanAttributeInfo MBEAN_ATTR_CPUINDEX;
+ private static final MBeanInfo MBEAN_INFO;
- private static final MBeanAttributeInfo MBEAN_ATTR_CACHESIZE;
+ private static final MBeanAttributeInfo MBEAN_ATTR_CPUINDEX;
- private static final MBeanAttributeInfo MBEAN_ATTR_MHZ;
+ private static final MBeanAttributeInfo MBEAN_ATTR_CACHESIZE;
- private static final MBeanAttributeInfo MBEAN_ATTR_MODEL;
+ private static final MBeanAttributeInfo MBEAN_ATTR_MHZ;
- private static final MBeanAttributeInfo MBEAN_ATTR_VENDOR;
+ private static final MBeanAttributeInfo MBEAN_ATTR_MODEL;
- private static final MBeanConstructorInfo MBEAN_CONSTR_CPUINDEX;
+ private static final MBeanAttributeInfo MBEAN_ATTR_VENDOR;
- private static final MBeanConstructorInfo MBEAN_CONSTR_CPUINDEX_SIGAR;
+ private static final MBeanConstructorInfo MBEAN_CONSTR_CPUINDEX;
- private static final MBeanParameterInfo MBEAN_PARAM_CPUINDEX;
+ private static final MBeanConstructorInfo MBEAN_CONSTR_CPUINDEX_SIGAR;
- private static final MBeanParameterInfo MBEAN_PARAM_SIGAR;
-
- static {
- MBEAN_ATTR_CPUINDEX = new MBeanAttributeInfo(
- "CpuIndex", "int",
- "The index of the CPU, typically starting at 0",
- true, false, false);
- MBEAN_ATTR_CACHESIZE = new MBeanAttributeInfo(
- "CacheSize", "long",
- "The cache size of the CPU, in [byte]",
- true, false, false);
- MBEAN_ATTR_MHZ = new MBeanAttributeInfo(
- "Mhz", "int",
- "The clock speed of the CPU, in [MHz]",
- true, false, false);
- MBEAN_ATTR_MODEL = new MBeanAttributeInfo(
- "Model", "java.lang.String",
- "The CPU model reported",
- true, false, false);
- MBEAN_ATTR_VENDOR = new MBeanAttributeInfo(
- "Vendor", "java.lang.String",
- "The CPU vendor reported",
- true, false, false);
- MBEAN_PARAM_CPUINDEX = new MBeanParameterInfo(
- "cpuIndex", "int",
- "The index of the CPU to read data for. Must be >= 0 " +
- "and not exceed the CPU count of the system");
- MBEAN_PARAM_SIGAR = new MBeanParameterInfo(
- "sigar", Sigar.class.getName(),
- "The Sigar instance to use to fetch data from");
- MBEAN_CONSTR_CPUINDEX = new MBeanConstructorInfo(
- SigarCpuInfo.class.getName(),
- "Creates a new instance for the CPU index specified, " +
- "using a new Sigar instance to fetch the data. " +
- "Fails if the CPU index is out of range.",
- new MBeanParameterInfo[]{
- MBEAN_PARAM_CPUINDEX});
- MBEAN_CONSTR_CPUINDEX_SIGAR = new MBeanConstructorInfo(
- SigarCpuInfo.class.getName(),
- "Creates a new instance for the CPU index specified, " +
- "using the Sigar instance specified to fetch the data. " +
- "Fails if the CPU index is out of range.",
- new MBeanParameterInfo[]{
- MBEAN_PARAM_SIGAR,
- MBEAN_PARAM_CPUINDEX});
- MBEAN_INFO = new MBeanInfo(
- SigarCpuInfo.class.getName(),
- "Sigar CPU Info MBean, provides overall information for a " +
- "single CPU. This information only changes if, for example, " +
- "a CPU is reducing its clock frequency or shutting down " +
- "part of its cache. Subsequent requests are satisfied from " +
- "within a cache that invalidates after 30 seconds.",
- new MBeanAttributeInfo[]{
- MBEAN_ATTR_CPUINDEX,
- MBEAN_ATTR_CACHESIZE,
- MBEAN_ATTR_MHZ,
- MBEAN_ATTR_MODEL,
- MBEAN_ATTR_VENDOR},
- new MBeanConstructorInfo[]{
- MBEAN_CONSTR_CPUINDEX,
- MBEAN_CONSTR_CPUINDEX_SIGAR},
- null, null);
-
- }
-
- /**
- * Index of the CPU processed by the instance.
- */
- private int cpuIndex;
+ private static final MBeanParameterInfo MBEAN_PARAM_CPUINDEX;
- /**
- * Object name this instance will give itself when being registered to an
- * MBeanServer.
- */
- private String objectName;
+ private static final MBeanParameterInfo MBEAN_PARAM_SIGAR;
- /**
- * Creates a new instance for the CPU index specified, using a new Sigar
- * instance to fetch the data. Fails if the CPU index is out of range.
- *
- * @param cpuIndex The index of the CPU to read data for. Must be
- * >= 0
and not exceed the CPU count of the system.
- *
- * @throws IllegalArgumentException If the CPU index is out of range or
- * an unexpected Sigar error occurs
- */
- public SigarCpuInfo(int index) throws IllegalArgumentException {
- this(new Sigar(), index);
- }
+ static {
+ MBEAN_ATTR_CPUINDEX = new MBeanAttributeInfo("CpuIndex", "int",
+ "The index of the CPU, typically starting at 0", true, false,
+ false);
+ MBEAN_ATTR_CACHESIZE = new MBeanAttributeInfo("CacheSize", "long",
+ "The cache size of the CPU, in [byte]", true, false, false);
+ MBEAN_ATTR_MHZ = new MBeanAttributeInfo("Mhz", "int",
+ "The clock speed of the CPU, in [MHz]", true, false, false);
+ MBEAN_ATTR_MODEL = new MBeanAttributeInfo("Model", "java.lang.String",
+ "The CPU model reported", true, false, false);
+ MBEAN_ATTR_VENDOR = new MBeanAttributeInfo("Vendor",
+ "java.lang.String", "The CPU vendor reported", true, false,
+ false);
+ MBEAN_PARAM_CPUINDEX = new MBeanParameterInfo("cpuIndex", "int",
+ "The index of the CPU to read data for. Must be >= 0 "
+ + "and not exceed the CPU count of the system");
+ MBEAN_PARAM_SIGAR = new MBeanParameterInfo("sigar", Sigar.class
+ .getName(), "The Sigar instance to use to fetch data from");
+ MBEAN_CONSTR_CPUINDEX = new MBeanConstructorInfo(SigarCpuInfo.class
+ .getName(),
+ "Creates a new instance for the CPU index specified, "
+ + "using a new Sigar instance to fetch the data. "
+ + "Fails if the CPU index is out of range.",
+ new MBeanParameterInfo[] { MBEAN_PARAM_CPUINDEX });
+ MBEAN_CONSTR_CPUINDEX_SIGAR = new MBeanConstructorInfo(
+ SigarCpuInfo.class.getName(),
+ "Creates a new instance for the CPU index specified, "
+ + "using the Sigar instance specified to fetch the data. "
+ + "Fails if the CPU index is out of range.",
+ new MBeanParameterInfo[] { MBEAN_PARAM_SIGAR,
+ MBEAN_PARAM_CPUINDEX });
+ MBEAN_INFO = new MBeanInfo(
+ SigarCpuInfo.class.getName(),
+ "Sigar CPU Info MBean, provides overall information for a "
+ + "single CPU. This information only changes if, for example, "
+ + "a CPU is reducing its clock frequency or shutting down "
+ + "part of its cache. Subsequent requests are satisfied from "
+ + "within a cache that invalidates after 30 seconds.",
+ new MBeanAttributeInfo[] { MBEAN_ATTR_CPUINDEX,
+ MBEAN_ATTR_CACHESIZE, MBEAN_ATTR_MHZ, MBEAN_ATTR_MODEL,
+ MBEAN_ATTR_VENDOR }, new MBeanConstructorInfo[] {
+ MBEAN_CONSTR_CPUINDEX, MBEAN_CONSTR_CPUINDEX_SIGAR },
+ null, null);
- /**
- * Creates a new instance for the CPU index specified, using the Sigar
- * instance specified to fetch the data. Fails if the CPU index is out
- * of range.
- *
- * @param sigar The Sigar instance to use to fetch data from
- * @param cpuIndex The index of the CPU to read data for. Must be
- * >= 0
and not exceed the CPU count of the system.
- *
- * @throws IllegalArgumentException If the CPU index is out of range or
- * an unexpected Sigar error occurs
- */
- public SigarCpuInfo(Sigar sigar, int index) {
- super(sigar, DEFAULT);
+ }
- // check index
- if (index < 0)
- throw new IllegalArgumentException(
- "CPU index has to be non-negative: " + index);
- try {
- int cpuCount;
- if ((cpuCount = sigar.getCpuInfoList().length) < index)
- throw new IllegalArgumentException(
- "CPU index out of range (found " + cpuCount + " CPU(s)): " + index);
-
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
-
- // all fine
- this.cpuIndex = index;
- this.objectName = SigarInvokerJMX.DOMAIN_NAME + ":"
- + MBEAN_ATTR_TYPE + "=CpuInfo,"
- + MBEAN_ATTR_CPUINDEX.getName().substring(0, 1).toLowerCase()
- + MBEAN_ATTR_CPUINDEX.getName().substring(1) + "=" + cpuIndex;
- }
+ /**
+ * Index of the CPU processed by the instance.
+ */
+ private int cpuIndex;
- /**
- * Object name this instance will give itself when being registered to an
- * MBeanServer.
- */
- public String getObjectName() {
- return this.objectName;
- }
-
- /**
- * @return The index of the CPU, typically starting at 0
- */
- public int getCpuIndex() {
- return this.cpuIndex;
- }
-
- /**
- * @return The cache size of the CPU, in [byte]
- */
- public long getCacheSize() {
- try {
- return sigar.getCpuInfoList()[this.cpuIndex].getCacheSize();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
+ /**
+ * Object name this instance will give itself when being registered to an
+ * MBeanServer.
+ */
+ private String objectName;
- /**
- * @return The clock speed of the CPU, in [MHz]
- */
- public int getMhz() {
- try {
- return sigar.getCpuInfoList()[this.cpuIndex].getMhz();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
+ /**
+ * Creates a new instance for the CPU index specified, using a new Sigar
+ * instance to fetch the data. Fails if the CPU index is out of range.
+ *
+ * @param cpuIndex The index of the CPU to read data for. Must be
+ * >= 0
and not exceed the CPU count of the system.
+ *
+ * @throws IllegalArgumentException If the CPU index is out of range or
+ * an unexpected Sigar error occurs
+ */
+ public SigarCpuInfo(int index) throws IllegalArgumentException {
+ this(new Sigar(), index);
+ }
- /**
- * @return The CPU model reported
- */
- public String getModel() {
- try {
- return sigar.getCpuInfoList()[this.cpuIndex].getModel();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
+ /**
+ * Creates a new instance for the CPU index specified, using the Sigar
+ * instance specified to fetch the data. Fails if the CPU index is out
+ * of range.
+ *
+ * @param sigar The Sigar instance to use to fetch data from
+ * @param cpuIndex The index of the CPU to read data for. Must be
+ * >= 0
and not exceed the CPU count of the system.
+ *
+ * @throws IllegalArgumentException If the CPU index is out of range or
+ * an unexpected Sigar error occurs
+ */
+ public SigarCpuInfo(Sigar sigar, int index) {
+ super(sigar, DEFAULT);
- /**
- * @return The CPU vendor reported
- */
- public String getVendor() {
- try {
- return sigar.getCpuInfoList()[this.cpuIndex].getVendor();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
+ // check index
+ if (index < 0)
+ throw new IllegalArgumentException(
+ "CPU index has to be non-negative: " + index);
+ try {
+ int cpuCount;
+ if ((cpuCount = sigar.getCpuInfoList().length) < index)
+ throw new IllegalArgumentException(
+ "CPU index out of range (found " + cpuCount
+ + " CPU(s)): " + index);
-
-
- // -------
- // Implementation of the DynamicMBean interface
- // -------
-
- /*
- * (non-Javadoc)
- * @see DynamicMBean#getAttribute(String)
- */
- public Object getAttribute(String attr) throws AttributeNotFoundException {
-
- if (MBEAN_ATTR_CACHESIZE.getName().equals(attr)) {
- return new Long(getCacheSize());
-
- } else if (MBEAN_ATTR_CPUINDEX.getName().equals(attr)) {
- return new Integer(getCpuIndex());
-
- } else if (MBEAN_ATTR_MHZ.getName().equals(attr)) {
- return new Integer(getMhz());
-
- } else if (MBEAN_ATTR_MODEL.getName().equals(attr)) {
- return getModel();
-
- } else if (MBEAN_ATTR_VENDOR.getName().equals(attr)) {
- return getVendor();
-
- } else {
- throw new AttributeNotFoundException(attr);
- }
- }
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
- /*
- * (non-Javadoc)
- * @see DynamicMBean#setAttribute(Attribute)
- */
- public void setAttribute(Attribute attr) throws AttributeNotFoundException {
- throw new AttributeNotFoundException(attr.getName());
- }
+ // all fine
+ this.cpuIndex = index;
+ this.objectName = SigarInvokerJMX.DOMAIN_NAME + ":" + MBEAN_ATTR_TYPE
+ + "=CpuInfo,"
+ + MBEAN_ATTR_CPUINDEX.getName().substring(0, 1).toLowerCase()
+ + MBEAN_ATTR_CPUINDEX.getName().substring(1) + "=" + cpuIndex;
+ }
- /*
- * (non-Javadoc)
- * @see DynamicMBean#invoke(String, Object[], String[])
- */
- public Object invoke(String actionName, Object[] params, String[] signature) throws ReflectionException {
- throw new ReflectionException(new NoSuchMethodException(actionName), actionName);
- }
-
- /*
- * (non-Javadoc)
- * @see DynamicMBean#getMBeanInfo()
- */
- public MBeanInfo getMBeanInfo() {
- return MBEAN_INFO;
- }
+ /**
+ * Object name this instance will give itself when being registered to an
+ * MBeanServer.
+ */
+ public String getObjectName() {
+ return this.objectName;
+ }
+
+ /**
+ * @return The index of the CPU, typically starting at 0
+ */
+ public int getCpuIndex() {
+ return this.cpuIndex;
+ }
+
+ /**
+ * @return The cache size of the CPU, in [byte]
+ */
+ public long getCacheSize() {
+ try {
+ return sigar.getCpuInfoList()[this.cpuIndex].getCacheSize();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
+
+ /**
+ * @return The clock speed of the CPU, in [MHz]
+ */
+ public int getMhz() {
+ try {
+ return sigar.getCpuInfoList()[this.cpuIndex].getMhz();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
+
+ /**
+ * @return The CPU model reported
+ */
+ public String getModel() {
+ try {
+ return sigar.getCpuInfoList()[this.cpuIndex].getModel();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
+
+ /**
+ * @return The CPU vendor reported
+ */
+ public String getVendor() {
+ try {
+ return sigar.getCpuInfoList()[this.cpuIndex].getVendor();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
+
+ // -------
+ // Implementation of the DynamicMBean interface
+ // -------
+
+ /*
+ * (non-Javadoc)
+ * @see DynamicMBean#getAttribute(String)
+ */
+ public Object getAttribute(String attr) throws AttributeNotFoundException {
+
+ if (MBEAN_ATTR_CACHESIZE.getName().equals(attr)) {
+ return new Long(getCacheSize());
+
+ } else if (MBEAN_ATTR_CPUINDEX.getName().equals(attr)) {
+ return new Integer(getCpuIndex());
+
+ } else if (MBEAN_ATTR_MHZ.getName().equals(attr)) {
+ return new Integer(getMhz());
+
+ } else if (MBEAN_ATTR_MODEL.getName().equals(attr)) {
+ return getModel();
+
+ } else if (MBEAN_ATTR_VENDOR.getName().equals(attr)) {
+ return getVendor();
+
+ } else {
+ throw new AttributeNotFoundException(attr);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see DynamicMBean#setAttribute(Attribute)
+ */
+ public void setAttribute(Attribute attr) throws AttributeNotFoundException {
+ throw new AttributeNotFoundException(attr.getName());
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see DynamicMBean#invoke(String, Object[], String[])
+ */
+ public Object invoke(String actionName, Object[] params, String[] signature)
+ throws ReflectionException {
+ throw new ReflectionException(new NoSuchMethodException(actionName),
+ actionName);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see DynamicMBean#getMBeanInfo()
+ */
+ public MBeanInfo getMBeanInfo() {
+ return MBEAN_INFO;
+ }
}
diff --git a/bindings/java/src/org/hyperic/sigar/jmx/SigarCpuPerc.java b/bindings/java/src/org/hyperic/sigar/jmx/SigarCpuPerc.java
index e3aec998..f53682b2 100644
--- a/bindings/java/src/org/hyperic/sigar/jmx/SigarCpuPerc.java
+++ b/bindings/java/src/org/hyperic/sigar/jmx/SigarCpuPerc.java
@@ -34,312 +34,300 @@ import org.hyperic.sigar.SigarException;
* package. Provides an OpenMBean conform implementation.
>= 0
and not exceed the CPU count of the system.
- *
- * @throws IllegalArgumentException If the CPU index is out of range or
- * an unexpected Sigar error occurs
- */
- public SigarCpuPerc(int index) {
- this(new Sigar(), index);
- }
+ /**
+ * Index of the CPU processed by the instance.
+ */
+ private int cpuIndex;
- /**
- * Creates a new instance for the CPU index specified, using the Sigar
- * instance specified to fetch the data. Fails if the CPU index is out
- * of range.
- *
- * @param sigar The Sigar instance to use to fetch data from
- * @param cpuIndex The index of the CPU to read data for. Must be
- * >= 0
and not exceed the CPU count of the system.
- *
- * @throws IllegalArgumentException If the CPU index is out of range or
- * an unexpected Sigar error occurs
- */
- public SigarCpuPerc(Sigar sigar, int index) {
- super(sigar, CACHED_5SEC);
+ /**
+ * Object name this instance will give itself when being registered to an
+ * MBeanServer.
+ */
+ private String objectName;
- // check index
- if (index < 0)
- throw new IllegalArgumentException(
- "CPU index has to be non-negative: " + index);
- try {
- int cpuCount;
- if ((cpuCount = sigar.getCpuPercList().length) < index)
- throw new IllegalArgumentException(
- "CPU index out of range (found " + cpuCount
- + " CPU(s)): " + index);
+ /**
+ * Creates a new instance for the CPU index specified, using a new Sigar
+ * instance to fetch the data. Fails if the CPU index is out of range.
+ *
+ * @param cpuIndex The index of the CPU to read data for. Must be
+ * >= 0
and not exceed the CPU count of the system.
+ *
+ * @throws IllegalArgumentException If the CPU index is out of range or
+ * an unexpected Sigar error occurs
+ */
+ public SigarCpuPerc(int index) {
+ this(new Sigar(), index);
+ }
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
+ /**
+ * Creates a new instance for the CPU index specified, using the Sigar
+ * instance specified to fetch the data. Fails if the CPU index is out
+ * of range.
+ *
+ * @param sigar The Sigar instance to use to fetch data from
+ * @param cpuIndex The index of the CPU to read data for. Must be
+ * >= 0
and not exceed the CPU count of the system.
+ *
+ * @throws IllegalArgumentException If the CPU index is out of range or
+ * an unexpected Sigar error occurs
+ */
+ public SigarCpuPerc(Sigar sigar, int index) {
+ super(sigar, CACHED_5SEC);
- // all fine
- this.cpuIndex = index;
- this.objectName = SigarInvokerJMX.DOMAIN_NAME + ":"
- + MBEAN_ATTR_TYPE + "=CpuPerc,"
- + MBEAN_ATTR_CPUINDEX.getName().substring(0, 1).toLowerCase()
- + MBEAN_ATTR_CPUINDEX.getName().substring(1) + "=" + cpuIndex;
- }
+ // check index
+ if (index < 0)
+ throw new IllegalArgumentException(
+ "CPU index has to be non-negative: " + index);
+ try {
+ int cpuCount;
+ if ((cpuCount = sigar.getCpuPercList().length) < index)
+ throw new IllegalArgumentException(
+ "CPU index out of range (found " + cpuCount
+ + " CPU(s)): " + index);
- /**
- * Object name this instance will give itself when being registered to an
- * MBeanServer.
- */
- public String getObjectName() {
- return this.objectName;
- }
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
- /**
- * @return The index of the CPU, typically starting at 0
- */
- public int getCpuIndex() {
- return this.cpuIndex;
- }
+ // all fine
+ this.cpuIndex = index;
+ this.objectName = SigarInvokerJMX.DOMAIN_NAME + ":" + MBEAN_ATTR_TYPE
+ + "=CpuPerc,"
+ + MBEAN_ATTR_CPUINDEX.getName().substring(0, 1).toLowerCase()
+ + MBEAN_ATTR_CPUINDEX.getName().substring(1) + "=" + cpuIndex;
+ }
- /**
- * @return The total time of the CPU, as a fraction of 1
- */
- public double getCombined() {
- try {
- return sigar.getCpuPercList()[this.cpuIndex].getCombined();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
+ /**
+ * Object name this instance will give itself when being registered to an
+ * MBeanServer.
+ */
+ public String getObjectName() {
+ return this.objectName;
+ }
- /**
- * @return The idle time of the CPU, as a fraction of 1
- */
- public double getIdle() {
- try {
- return sigar.getCpuPercList()[this.cpuIndex].getIdle();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
+ /**
+ * @return The index of the CPU, typically starting at 0
+ */
+ public int getCpuIndex() {
+ return this.cpuIndex;
+ }
- /**
- * @return The time of the CPU spent on nice priority, as a fraction of 1
- */
- public double getNice() {
- try {
- return sigar.getCpuPercList()[this.cpuIndex].getNice();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
+ /**
+ * @return The total time of the CPU, as a fraction of 1
+ */
+ public double getCombined() {
+ try {
+ return sigar.getCpuPercList()[this.cpuIndex].getCombined();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
- /**
- * @return The time of the CPU used by the system, as a fraction of 1
- */
- public double getSys() {
- try {
- return sigar.getCpuPercList()[this.cpuIndex].getSys();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
+ /**
+ * @return The idle time of the CPU, as a fraction of 1
+ */
+ public double getIdle() {
+ try {
+ return sigar.getCpuPercList()[this.cpuIndex].getIdle();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
- /**
- * @return The time of the CPU used by user processes, as a fraction of 1
- */
- public double getUser() {
- try {
- return sigar.getCpuPercList()[this.cpuIndex].getUser();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
+ /**
+ * @return The time of the CPU spent on nice priority, as a fraction of 1
+ */
+ public double getNice() {
+ try {
+ return sigar.getCpuPercList()[this.cpuIndex].getNice();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
- /**
- * @return The time the CPU had to wait for data to be loaded, as a fraction of 1
- */
- public double getWait() {
- try {
- return sigar.getCpuPercList()[this.cpuIndex].getWait();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
+ /**
+ * @return The time of the CPU used by the system, as a fraction of 1
+ */
+ public double getSys() {
+ try {
+ return sigar.getCpuPercList()[this.cpuIndex].getSys();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
-
-
- // -------
- // Implementation of the DynamicMBean interface
- // -------
-
- /*
- * (non-Javadoc)
- * @see DynamicMBean#getAttribute(String)
- */
- public Object getAttribute(String attr) throws AttributeNotFoundException {
-
- if (MBEAN_ATTR_COMBINED.getName().equals(attr)) {
- return new Double(getCombined());
-
- } else if (MBEAN_ATTR_CPUINDEX.getName().equals(attr)) {
- return new Integer(getCpuIndex());
-
- } else if (MBEAN_ATTR_IDLE.getName().equals(attr)) {
- return new Double(getIdle());
-
- } else if (MBEAN_ATTR_NICE.getName().equals(attr)) {
- return new Double(getNice());
-
- } else if (MBEAN_ATTR_SYS.getName().equals(attr)) {
- return new Double(getSys());
-
- } else if (MBEAN_ATTR_USER.getName().equals(attr)) {
- return new Double(getUser());
-
- } else if (MBEAN_ATTR_WAIT.getName().equals(attr)) {
- return new Double(getWait());
-
- } else {
- throw new AttributeNotFoundException(attr);
- }
- }
+ /**
+ * @return The time of the CPU used by user processes, as a fraction of 1
+ */
+ public double getUser() {
+ try {
+ return sigar.getCpuPercList()[this.cpuIndex].getUser();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
- /*
- * (non-Javadoc)
- * @see DynamicMBean#setAttribute(Attribute)
- */
- public void setAttribute(Attribute attr) throws AttributeNotFoundException {
- throw new AttributeNotFoundException(attr.getName());
- }
+ /**
+ * @return The time the CPU had to wait for data to be loaded, as a fraction of 1
+ */
+ public double getWait() {
+ try {
+ return sigar.getCpuPercList()[this.cpuIndex].getWait();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
- /*
- * (non-Javadoc)
- * @see DynamicMBean#invoke(String, Object[], String[])
- */
- public Object invoke(String actionName, Object[] params, String[] signature) throws ReflectionException {
- throw new ReflectionException(new NoSuchMethodException(actionName), actionName);
- }
-
- /*
- * (non-Javadoc)
- * @see DynamicMBean#getMBeanInfo()
- */
- public MBeanInfo getMBeanInfo() {
- return MBEAN_INFO;
- }
+ // -------
+ // Implementation of the DynamicMBean interface
+ // -------
+
+ /*
+ * (non-Javadoc)
+ * @see DynamicMBean#getAttribute(String)
+ */
+ public Object getAttribute(String attr) throws AttributeNotFoundException {
+
+ if (MBEAN_ATTR_COMBINED.getName().equals(attr)) {
+ return new Double(getCombined());
+
+ } else if (MBEAN_ATTR_CPUINDEX.getName().equals(attr)) {
+ return new Integer(getCpuIndex());
+
+ } else if (MBEAN_ATTR_IDLE.getName().equals(attr)) {
+ return new Double(getIdle());
+
+ } else if (MBEAN_ATTR_NICE.getName().equals(attr)) {
+ return new Double(getNice());
+
+ } else if (MBEAN_ATTR_SYS.getName().equals(attr)) {
+ return new Double(getSys());
+
+ } else if (MBEAN_ATTR_USER.getName().equals(attr)) {
+ return new Double(getUser());
+
+ } else if (MBEAN_ATTR_WAIT.getName().equals(attr)) {
+ return new Double(getWait());
+
+ } else {
+ throw new AttributeNotFoundException(attr);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see DynamicMBean#setAttribute(Attribute)
+ */
+ public void setAttribute(Attribute attr) throws AttributeNotFoundException {
+ throw new AttributeNotFoundException(attr.getName());
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see DynamicMBean#invoke(String, Object[], String[])
+ */
+ public Object invoke(String actionName, Object[] params, String[] signature)
+ throws ReflectionException {
+ throw new ReflectionException(new NoSuchMethodException(actionName),
+ actionName);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see DynamicMBean#getMBeanInfo()
+ */
+ public MBeanInfo getMBeanInfo() {
+ return MBEAN_INFO;
+ }
}
diff --git a/bindings/java/src/org/hyperic/sigar/jmx/SigarLoadAverage.java b/bindings/java/src/org/hyperic/sigar/jmx/SigarLoadAverage.java
new file mode 100644
index 00000000..586f419e
--- /dev/null
+++ b/bindings/java/src/org/hyperic/sigar/jmx/SigarLoadAverage.java
@@ -0,0 +1,263 @@
+/*
+ * Copyright (C) [2004, 2005, 2006, 2007], Hyperic, Inc.
+ * This file is part of SIGAR.
+ *
+ * SIGAR is free software; you can redistribute it and/or modify
+ * it under the terms version 2 of the GNU General Public License as
+ * published by the Free Software Foundation. This program is distributed
+ * in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+ * even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA.
+ */
+
+package org.hyperic.sigar.jmx;
+
+import javax.management.Attribute;
+import javax.management.AttributeNotFoundException;
+import javax.management.MBeanAttributeInfo;
+import javax.management.MBeanConstructorInfo;
+import javax.management.MBeanInfo;
+import javax.management.MBeanParameterInfo;
+import javax.management.ReflectionException;
+
+import org.hyperic.sigar.Sigar;
+import org.hyperic.sigar.SigarException;
+import org.hyperic.sigar.SigarNotImplementedException;
+
+/**
+ * Sigar JMX MBean implementation for the LoadAverage
information
+ * package. Provides an OpenMBean conform implementation.
+ *
+ * @author Bjoern Martin
+ * @since 1.5
+ */
+public class SigarLoadAverage extends AbstractMBean {
+
+ private static final String MBEAN_TYPE = "LoadAverage";
+
+ /**
+ * Returned if {@link Sigar#getLoadAverage()}} is detected to be not
+ * implemented on the platform.
+ *
+ * @see #notImplemented
+ */
+ private static final double NOT_IMPLEMENTED_LOAD_VALUE = -1.0d;
+
+ private static final MBeanInfo MBEAN_INFO;
+
+ private static final MBeanAttributeInfo MBEAN_ATTR_LAST1MIN;
+
+ private static final MBeanAttributeInfo MBEAN_ATTR_LAST5MIN;
+
+ private static final MBeanAttributeInfo MBEAN_ATTR_LAST15MIN;
+
+ private static final MBeanConstructorInfo MBEAN_CONSTR_SIGAR;
+
+ private static MBeanParameterInfo MBEAN_PARAM_SIGAR;
+
+ static {
+ MBEAN_ATTR_LAST1MIN = new MBeanAttributeInfo(
+ "LastMinute",
+ "double",
+ "The load average in the last minute, as a fraction of 1, or "
+ + "-1.0 if the load cannot be determined on this platform",
+ true, false, false);
+ MBEAN_ATTR_LAST5MIN = new MBeanAttributeInfo(
+ "LastFiveMinutes",
+ "double",
+ "The load average over the last five minutes, as a fraction "
+ + "of 1, or -1.0 if the load cannot be determined on this platform",
+ true, false, false);
+ MBEAN_ATTR_LAST15MIN = new MBeanAttributeInfo(
+ "Last15Minutes",
+ "double",
+ "The load average over the last 15 minutes, as a fraction of "
+ + "1, or -1.0 if the load cannot be determined on this platform",
+ true, false, false);
+
+ MBEAN_PARAM_SIGAR = new MBeanParameterInfo("sigar", Sigar.class
+ .getName(), "The Sigar instance to use to fetch data from");
+
+ MBEAN_CONSTR_SIGAR = new MBeanConstructorInfo(
+ SigarLoadAverage.class.getName(),
+ "Creates a new instance, using the Sigar instance specified "
+ + "to fetch the data. Fails if the CPU index is out of range.",
+ new MBeanParameterInfo[] { MBEAN_PARAM_SIGAR });
+ MBEAN_INFO = new MBeanInfo(
+ SigarLoadAverage.class.getName(),
+ "Sigar load average MBean. Provides load averages of the "
+ + "system over the last one, five and 15 minutes. Due to the "
+ + "long term character of that information, the fetch is done "
+ + "using a Sigar proxy cache with a timeout of 30 seconds.",
+ new MBeanAttributeInfo[] { MBEAN_ATTR_LAST1MIN,
+ MBEAN_ATTR_LAST5MIN, MBEAN_ATTR_LAST15MIN },
+ new MBeanConstructorInfo[] { MBEAN_CONSTR_SIGAR }, null, null);
+
+ }
+
+ /**
+ * Object name this instance will give itself when being registered to an
+ * MBeanServer.
+ */
+ private final String objectName;
+
+ /**
+ * Set true
when the load average fetch failed with a
+ * SigarException
that indicates the method is not implemented.
+ * Any subsequent call to this instance will then be answered with
+ * {@link #NOT_IMPLEMENTED_LOAD_VALUE}.
+ *
FIXME : This is a workaround and should be replaced by something
+ * more stable, as the code setting this member true
relies on
+ * a substring being present within the exception. A proposal was made at
+ * issue SIGAR-52.
+ *
-1.0d
if the load cannot be determined on this platform
+ */
+ public double getLastMinute() {
+ try {
+ return sigarImpl.getLoadAverage()[0];
+
+ } catch (SigarNotImplementedException e) {
+ return NOT_IMPLEMENTED_LOAD_VALUE;
+
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
+
+ /**
+ * @return The load average over the last five minutes, as a fraction of 1,
+ * or -1.0d
if the load cannot be determined on this
+ * platform
+ */
+ public double getLastFiveMinutes() {
+ try {
+ return sigarImpl.getLoadAverage()[1];
+
+ } catch (SigarNotImplementedException e) {
+ return NOT_IMPLEMENTED_LOAD_VALUE;
+
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
+
+ /**
+ * @return The load average over the last 15 minutes, as a fraction of 1, or
+ * -1.0d
if the load cannot be determined on this platform
+ */
+ public double getLast15Minutes() {
+ try {
+ return sigarImpl.getLoadAverage()[2];
+
+ } catch (SigarNotImplementedException e) {
+ return NOT_IMPLEMENTED_LOAD_VALUE;
+
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
+
+ // -------
+ // Implementation of the DynamicMBean interface
+ // -------
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see DynamicMBean#getAttribute(String)
+ */
+ public Object getAttribute(String attr) throws AttributeNotFoundException {
+
+ if (MBEAN_ATTR_LAST1MIN.getName().equals(attr)) {
+ return new Double(getLastMinute());
+
+ } else if (MBEAN_ATTR_LAST5MIN.getName().equals(attr)) {
+ return new Double(getLastFiveMinutes());
+
+ } else if (MBEAN_ATTR_LAST15MIN.getName().equals(attr)) {
+ return new Double(getLast15Minutes());
+
+ } else {
+ throw new AttributeNotFoundException(attr);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see DynamicMBean#setAttribute(Attribute)
+ */
+ public void setAttribute(Attribute attr) throws AttributeNotFoundException {
+ throw new AttributeNotFoundException(attr.getName());
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see DynamicMBean#invoke(String, Object[], String[])
+ */
+ public Object invoke(String actionName, Object[] params, String[] signature)
+ throws ReflectionException {
+ throw new ReflectionException(new NoSuchMethodException(actionName),
+ actionName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see DynamicMBean#getMBeanInfo()
+ */
+ public MBeanInfo getMBeanInfo() {
+ return MBEAN_INFO;
+ }
+}
diff --git a/bindings/java/src/org/hyperic/sigar/jmx/SigarMem.java b/bindings/java/src/org/hyperic/sigar/jmx/SigarMem.java
index 13bc1604..bf7c1ea3 100644
--- a/bindings/java/src/org/hyperic/sigar/jmx/SigarMem.java
+++ b/bindings/java/src/org/hyperic/sigar/jmx/SigarMem.java
@@ -35,238 +35,217 @@ import org.hyperic.sigar.SigarException;
* package. Provides an OpenMBean conform implementation.
*
* @author Bjoern Martin
- * @since 1.4 (2007-04)
+ * @since 1.5
*/
public class SigarMem extends AbstractMBean {
- private static final String MBEAN_TYPE = "Mem";
+ private static final String MBEAN_TYPE = "Mem";
- private static final MBeanInfo MBEAN_INFO;
-
- private static final MBeanAttributeInfo MBEAN_ATTR_ACTUAL_FREE;
+ private static final MBeanInfo MBEAN_INFO;
- private static final MBeanAttributeInfo MBEAN_ATTR_ACTUAL_USED;
+ private static final MBeanAttributeInfo MBEAN_ATTR_ACTUAL_FREE;
- private static final MBeanAttributeInfo MBEAN_ATTR_FREE;
+ private static final MBeanAttributeInfo MBEAN_ATTR_ACTUAL_USED;
- private static final MBeanAttributeInfo MBEAN_ATTR_RAM;
+ private static final MBeanAttributeInfo MBEAN_ATTR_FREE;
- private static final MBeanAttributeInfo MBEAN_ATTR_TOTAL;
+ private static final MBeanAttributeInfo MBEAN_ATTR_RAM;
- private static final MBeanAttributeInfo MBEAN_ATTR_USED;
+ private static final MBeanAttributeInfo MBEAN_ATTR_TOTAL;
- private static final MBeanConstructorInfo MBEAN_CONSTR_SIGAR;
+ private static final MBeanAttributeInfo MBEAN_ATTR_USED;
- private static MBeanParameterInfo MBEAN_PARAM_SIGAR;
-
- static {
- MBEAN_ATTR_ACTUAL_FREE = new MBeanAttributeInfo(
- "ActualFree", "long",
- "TODO add proper description here",
- true, false, false);
- MBEAN_ATTR_ACTUAL_USED = new MBeanAttributeInfo(
- "ActualUsed", "long",
- "TODO add proper description here",
- true, false, false);
- MBEAN_ATTR_FREE = new MBeanAttributeInfo(
- "Free", "long",
- "TODO add proper description here",
- true, false, false);
- MBEAN_ATTR_RAM = new MBeanAttributeInfo(
- "Ram", "long",
- "TODO add proper description here",
- true, false, false);
- MBEAN_ATTR_TOTAL = new MBeanAttributeInfo(
- "Total", "long",
- "TODO add proper description here",
- true, false, false);
- MBEAN_ATTR_USED = new MBeanAttributeInfo(
- "Used", "long",
- "TODO add proper description here",
- true, false, false);
- MBEAN_PARAM_SIGAR = new MBeanParameterInfo(
- "sigar", Sigar.class.getName(),
- "The Sigar instance to use to fetch data from");
- MBEAN_CONSTR_SIGAR = new MBeanConstructorInfo(
- SigarMem.class.getName(),
- "Creates a new instance, using the Sigar instance " +
- "specified to fetch the data.",
- new MBeanParameterInfo[]{
- MBEAN_PARAM_SIGAR});
- MBEAN_INFO = new MBeanInfo(
- SigarMem.class.getName(),
- "Sigar Memory MBean, provides raw data for the physical " +
- "memory installed on the system. Uses an internal cache " +
- "that invalidates within 500ms, allowing for bulk request " +
- "being satisfied with a single dataset fetch.",
- new MBeanAttributeInfo[]{
- MBEAN_ATTR_ACTUAL_FREE,
- MBEAN_ATTR_ACTUAL_USED,
- MBEAN_ATTR_FREE,
- MBEAN_ATTR_RAM,
- MBEAN_ATTR_TOTAL,
- MBEAN_ATTR_USED},
- new MBeanConstructorInfo[]{
- MBEAN_CONSTR_SIGAR},
- null, null);
-
- }
-
- /**
- * Object name this instance will give itself when being registered to an
- * MBeanServer.
- */
- private final String objectName;
+ private static final MBeanConstructorInfo MBEAN_CONSTR_SIGAR;
- /**
- * Creates a new instance, using the Sigar instance specified to fetch the
- * data.
- *
- * @param sigar
- * The Sigar instance to use to fetch data from
- *
- * @throws IllegalArgumentException
- * If an unexpected Sigar error occurs
- */
- public SigarMem(Sigar sigar) throws IllegalArgumentException {
- super(sigar, CACHED_500MS);
+ private static MBeanParameterInfo MBEAN_PARAM_SIGAR;
- this.objectName = SigarInvokerJMX.DOMAIN_NAME + ":" + MBEAN_ATTR_TYPE
- + "=Memory";
- }
+ static {
+ MBEAN_ATTR_ACTUAL_FREE = new MBeanAttributeInfo("ActualFree", "long",
+ "TODO add proper description here", true, false, false);
+ MBEAN_ATTR_ACTUAL_USED = new MBeanAttributeInfo("ActualUsed", "long",
+ "TODO add proper description here", true, false, false);
+ MBEAN_ATTR_FREE = new MBeanAttributeInfo("Free", "long",
+ "TODO add proper description here", true, false, false);
+ MBEAN_ATTR_RAM = new MBeanAttributeInfo("Ram", "long",
+ "TODO add proper description here", true, false, false);
+ MBEAN_ATTR_TOTAL = new MBeanAttributeInfo("Total", "long",
+ "TODO add proper description here", true, false, false);
+ MBEAN_ATTR_USED = new MBeanAttributeInfo("Used", "long",
+ "TODO add proper description here", true, false, false);
+ MBEAN_PARAM_SIGAR = new MBeanParameterInfo("sigar", Sigar.class
+ .getName(), "The Sigar instance to use to fetch data from");
+ MBEAN_CONSTR_SIGAR = new MBeanConstructorInfo(SigarMem.class.getName(),
+ "Creates a new instance, using the Sigar instance "
+ + "specified to fetch the data.",
+ new MBeanParameterInfo[] { MBEAN_PARAM_SIGAR });
+ MBEAN_INFO = new MBeanInfo(
+ SigarMem.class.getName(),
+ "Sigar Memory MBean, provides raw data for the physical "
+ + "memory installed on the system. Uses an internal cache "
+ + "that invalidates within 500ms, allowing for bulk request "
+ + "being satisfied with a single dataset fetch.",
+ new MBeanAttributeInfo[] { MBEAN_ATTR_ACTUAL_FREE,
+ MBEAN_ATTR_ACTUAL_USED, MBEAN_ATTR_FREE,
+ MBEAN_ATTR_RAM, MBEAN_ATTR_TOTAL, MBEAN_ATTR_USED },
+ new MBeanConstructorInfo[] { MBEAN_CONSTR_SIGAR }, null, null);
- /**
- * Object name this instance will give itself when being registered to an
- * MBeanServer.
- */
- public String getObjectName() {
- return this.objectName;
- }
+ }
- /**
- * @return The actual amount of free physical memory, in [bytes]
- */
- public long getActualFree() {
- try {
- return sigar.getMem().getActualFree();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
+ /**
+ * Object name this instance will give itself when being registered to an
+ * MBeanServer.
+ */
+ private final String objectName;
- /**
- * @return The actual amount of physical memory used, in [bytes]
- */
- public long getActualUsed() {
- try {
- return sigar.getMem().getActualUsed();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
+ /**
+ * Creates a new instance, using the Sigar instance specified to fetch the
+ * data.
+ *
+ * @param sigar
+ * The Sigar instance to use to fetch data from
+ *
+ * @throws IllegalArgumentException
+ * If an unexpected Sigar error occurs
+ */
+ public SigarMem(Sigar sigar) throws IllegalArgumentException {
+ super(sigar, CACHED_500MS);
- /**
- * @return The amount of free physical memory, in [bytes]
- */
- public long getFree() {
- try {
- return sigar.getMem().getFree();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
+ this.objectName = SigarInvokerJMX.DOMAIN_NAME + ":" + MBEAN_ATTR_TYPE
+ + "=Memory";
+ }
- /**
- * @return The amount of physical memory, in [bytes]
- */
- public long getRam() {
- try {
- return sigar.getMem().getRam();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
+ /**
+ * Object name this instance will give itself when being registered to an
+ * MBeanServer.
+ */
+ public String getObjectName() {
+ return this.objectName;
+ }
- /**
- * @return The total amount of physical memory, in [bytes]
- */
- public long getTotal() {
- try {
- return sigar.getMem().getTotal();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
+ /**
+ * @return The actual amount of free physical memory, in [bytes]
+ */
+ public long getActualFree() {
+ try {
+ return sigar.getMem().getActualFree();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
- /**
- * @return The amount of physical memory in use, in [bytes]
- */
- public long getUsed() {
- try {
- return sigar.getMem().getUsed();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
+ /**
+ * @return The actual amount of physical memory used, in [bytes]
+ */
+ public long getActualUsed() {
+ try {
+ return sigar.getMem().getActualUsed();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
- // -------
- // Implementation of the DynamicMBean interface
- // -------
+ /**
+ * @return The amount of free physical memory, in [bytes]
+ */
+ public long getFree() {
+ try {
+ return sigar.getMem().getFree();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
- /*
- * (non-Javadoc)
- *
- * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
- */
- public Object getAttribute(String attr) throws AttributeNotFoundException,
- MBeanException, ReflectionException {
- if (MBEAN_ATTR_ACTUAL_FREE.getName().equals(attr)) {
- return new Long(getActualFree());
+ /**
+ * @return The amount of physical memory, in [bytes]
+ */
+ public long getRam() {
+ try {
+ return sigar.getMem().getRam();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
- } else if (MBEAN_ATTR_ACTUAL_USED.getName().equals(attr)) {
- return new Long(getActualUsed());
+ /**
+ * @return The total amount of physical memory, in [bytes]
+ */
+ public long getTotal() {
+ try {
+ return sigar.getMem().getTotal();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
- } else if (MBEAN_ATTR_FREE.getName().equals(attr)) {
- return new Long(getFree());
+ /**
+ * @return The amount of physical memory in use, in [bytes]
+ */
+ public long getUsed() {
+ try {
+ return sigar.getMem().getUsed();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
- } else if (MBEAN_ATTR_RAM.getName().equals(attr)) {
- return new Long(getRam());
+ // -------
+ // Implementation of the DynamicMBean interface
+ // -------
- } else if (MBEAN_ATTR_TOTAL.getName().equals(attr)) {
- return new Long(getTotal());
+ /*
+ * (non-Javadoc)
+ *
+ * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
+ */
+ public Object getAttribute(String attr) throws AttributeNotFoundException,
+ MBeanException, ReflectionException {
+ if (MBEAN_ATTR_ACTUAL_FREE.getName().equals(attr)) {
+ return new Long(getActualFree());
- } else if (MBEAN_ATTR_USED.getName().equals(attr)) {
- return new Long(getUsed());
+ } else if (MBEAN_ATTR_ACTUAL_USED.getName().equals(attr)) {
+ return new Long(getActualUsed());
- } else {
- throw new AttributeNotFoundException(attr);
- }
- }
+ } else if (MBEAN_ATTR_FREE.getName().equals(attr)) {
+ return new Long(getFree());
- /*
- * (non-Javadoc)
- * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
- */
- public void setAttribute(Attribute attr) throws AttributeNotFoundException {
- throw new AttributeNotFoundException(attr.getName());
- }
+ } else if (MBEAN_ATTR_RAM.getName().equals(attr)) {
+ return new Long(getRam());
- /*
- * (non-Javadoc)
- * @see javax.management.DynamicMBean#invoke(java.lang.String,
- * java.lang.Object[], java.lang.String[])
- */
- public Object invoke(String actionName, Object[] params, String[] signature)
- throws ReflectionException {
- throw new ReflectionException(new NoSuchMethodException(actionName),
- actionName);
- }
+ } else if (MBEAN_ATTR_TOTAL.getName().equals(attr)) {
+ return new Long(getTotal());
- /*
- * (non-Javadoc)
- * @see javax.management.DynamicMBean#getMBeanInfo()
- */
- public MBeanInfo getMBeanInfo() {
- return MBEAN_INFO;
- }
+ } else if (MBEAN_ATTR_USED.getName().equals(attr)) {
+ return new Long(getUsed());
+
+ } else {
+ throw new AttributeNotFoundException(attr);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
+ */
+ public void setAttribute(Attribute attr) throws AttributeNotFoundException {
+ throw new AttributeNotFoundException(attr.getName());
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see javax.management.DynamicMBean#invoke(java.lang.String,
+ * java.lang.Object[], java.lang.String[])
+ */
+ public Object invoke(String actionName, Object[] params, String[] signature)
+ throws ReflectionException {
+ throw new ReflectionException(new NoSuchMethodException(actionName),
+ actionName);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see javax.management.DynamicMBean#getMBeanInfo()
+ */
+ public MBeanInfo getMBeanInfo() {
+ return MBEAN_INFO;
+ }
}
diff --git a/bindings/java/src/org/hyperic/sigar/jmx/SigarRegistry.java b/bindings/java/src/org/hyperic/sigar/jmx/SigarRegistry.java
index 11a14af9..43fc091f 100644
--- a/bindings/java/src/org/hyperic/sigar/jmx/SigarRegistry.java
+++ b/bindings/java/src/org/hyperic/sigar/jmx/SigarRegistry.java
@@ -41,14 +41,14 @@ import org.hyperic.sigar.SigarException;
*
* Cpu
, CpuPerc
- * and CpuInfo
. One instance will be registered for each CPU
- * (core?) found.
- */
- private void registerCpuBeans() {
- ObjectInstance nextRegistered = null;
-
- try {
- final int cpuCount = sigar.getCpuInfoList().length;
- for (int i = 0; i < cpuCount; i++) {
- // add CPU bean
- SigarCpu nextCpu = new SigarCpu(sigarImpl, i);
- try {
- if (!mbeanServer.isRegistered(new ObjectName(nextCpu.getObjectName())))
- nextRegistered = mbeanServer.registerMBean(nextCpu, null);
- } catch (Exception e) { // ignore
- }
- // add MBean to set of managed beans
- if (nextRegistered != null)
- managedBeans.add(nextRegistered.getObjectName());
- nextRegistered = null;
-
- // add CPU percentage bean
- SigarCpuPerc nextCpuPerc = new SigarCpuPerc(sigarImpl, i);
- try {
- if (!mbeanServer.isRegistered(new ObjectName(nextCpuPerc.getObjectName())))
- nextRegistered = mbeanServer.registerMBean(nextCpuPerc, null);
- } catch (Exception e) { // ignore
- }
- // add MBean to set of managed beans
- if (nextRegistered != null)
- managedBeans.add(nextRegistered.getObjectName());
- nextRegistered = null;
-
- // add CPU info bean
- SigarCpuInfo nextCpuInfo = new SigarCpuInfo(sigarImpl, i);
- try {
- if (!mbeanServer.isRegistered(new ObjectName(nextCpuInfo.getObjectName())))
- nextRegistered = mbeanServer.registerMBean(nextCpuInfo, null);
- } catch (Exception e) { // ignore
- }
- // add MBean to set of managed beans
- if (nextRegistered != null)
- managedBeans.add(nextRegistered.getObjectName());
- nextRegistered = null;
- }
-
- } catch (SigarException e) {
- throw unexpectedError("CpuInfoList", e);
- }
- }
-
- /**
- * Registers MBeans for the Sigar types Mem
and Swap
.
- */
- private void registerMemoryBeans() {
-
- ObjectInstance nextRegistered = null;
-
- // add physical memory bean
- SigarMem mem = new SigarMem(sigarImpl);
-
- try {
- if (!mbeanServer.isRegistered(new ObjectName(mem.getObjectName())))
- nextRegistered = mbeanServer.registerMBean(mem, null);
- } catch (Exception e) { // ignore
- }
-
- // add MBean to set of managed beans
- if (nextRegistered != null)
- managedBeans.add(nextRegistered.getObjectName());
- nextRegistered = null;
-
- // add swap memory bean
- SigarSwap swap = new SigarSwap(sigarImpl);
- try {
- if (!mbeanServer.isRegistered(new ObjectName(swap.getObjectName())))
- nextRegistered = mbeanServer.registerMBean(swap, null);
- } catch (Exception e) { // ignore
- nextRegistered = null;
- }
-
- // add MBean to set of managed beans
- if (nextRegistered != null)
- managedBeans.add(nextRegistered.getObjectName());
- nextRegistered = null;
- }
-
- /**
- * Deregisters all Sigar MBeans that were created and registered using this
- * instance. After doing so, a super call is made to satisfy {@link AbstractMBean}.
- * @throws Exception
- *
- * @see AbstractMBean#preDeregister()
- */
- public void preDeregister() throws Exception {
-
- // count backwards to remove ONs immediately
- for (int i = managedBeans.size() - 1; i >= 0; i--) {
- ObjectName next = (ObjectName) managedBeans.remove(i);
- if (mbeanServer.isRegistered(next)) {
- try {
- mbeanServer.unregisterMBean(next);
- } catch (Exception e) { // ignore
- }
- }
- }
-
- // do the super call
- super.preDeregister();
- }
+ /**
+ * Creates a new instance of this class. Will create the Sigar instance this
+ * class uses when constructing other MBeans.
+ */
+ public SigarRegistry() {
+ super(new Sigar(), CACHELESS);
+ this.objectName = SigarInvokerJMX.DOMAIN_NAME + ":" + MBEAN_ATTR_TYPE
+ + "=" + MBEAN_TYPE;
+ this.managedBeans = new ArrayList();
+ }
+
+ /* (non-Javadoc)
+ * @see AbstractMBean#getObjectName()
+ */
+ public String getObjectName() {
+ return this.objectName;
+ }
+
+/* public String listProcesses() {
+ try {
+ final long start = System.currentTimeMillis();
+ long[] ids = sigar.getProcList();
+ StringBuffer procNames = new StringBuffer();
+ for (int i = 0; i < ids.length; i++) {
+ try {
+ procNames.append(ids[i] + ":" + sigar.getProcExe(ids[i]).getName()).append('\n');
+ } catch (SigarException e) {
+ procNames.append(ids[i] + ":" + e.getMessage()).append('\n');
+ }
+ }
+
+ final long end = System.currentTimeMillis();
+ procNames.append("-- Took " + (end-start) + "ms");
+ return procNames.toString();
+
+ } catch (SigarException e) {
+ throw unexpectedError("ProcList", e);
+ }
+ }
+*/
+ /* (non-Javadoc)
+ * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
+ */
+ public Object getAttribute(String attr) throws AttributeNotFoundException {
+ throw new AttributeNotFoundException(attr);
+ }
+
+ /* (non-Javadoc)
+ * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
+ */
+ public void setAttribute(Attribute attr) throws AttributeNotFoundException {
+ throw new AttributeNotFoundException(attr.getName());
+ }
+
+ /* (non-Javadoc)
+ * @see javax.management.DynamicMBean#invoke(java.lang.String, java.lang.Object[], java.lang.String[])
+ */
+ public Object invoke(String action, Object[] params, String[] signatures)
+ throws MBeanException, ReflectionException {
+
+/* if (MBEAN_OPER_LISTPROCESSES.getName().equals(action))
+ return listProcesses();
+
+ else */
+ throw new ReflectionException(new NoSuchMethodException(action), action);
+ }
+
+ /* (non-Javadoc)
+ * @see javax.management.DynamicMBean#getMBeanInfo()
+ */
+ public MBeanInfo getMBeanInfo() {
+ return MBEAN_INFO;
+ }
+
+ // -------
+ // Implementation of the MBeanRegistration interface
+ // -------
+
+ /**
+ * Registers the default set of Sigar MBeans. Before doing so, a super call
+ * is made to satisfy {@link AbstractMBean}.
+ *
+ * @see AbstractMBean#postRegister(Boolean)
+ */
+ public void postRegister(Boolean success) {
+
+ super.postRegister(success);
+
+ if (!success.booleanValue())
+ return;
+
+ // get CPUs
+ registerCpuBeans();
+
+ // get memory
+ registerMemoryBeans();
+
+ // get system
+ registerSystemBeans();
+ }
+
+ /**
+ * Registers MBeans for the Sigar types Cpu
, CpuPerc
+ * and CpuInfo
. One instance will be registered for each CPU
+ * (core?) found.
+ */
+ private void registerCpuBeans() {
+ ObjectInstance nextRegistered = null;
+
+ try {
+ final int cpuCount = sigar.getCpuInfoList().length;
+ for (int i = 0; i < cpuCount; i++) {
+ // add CPU bean
+ SigarCpu nextCpu = new SigarCpu(sigarImpl, i);
+ try {
+ if (!mbeanServer.isRegistered(new ObjectName(nextCpu
+ .getObjectName())))
+ nextRegistered = mbeanServer.registerMBean(nextCpu,
+ null);
+ } catch (Exception e) { // ignore
+ }
+ // add MBean to set of managed beans
+ if (nextRegistered != null)
+ managedBeans.add(nextRegistered.getObjectName());
+ nextRegistered = null;
+
+ // add CPU percentage bean
+ SigarCpuPerc nextCpuPerc = new SigarCpuPerc(sigarImpl, i);
+ try {
+ if (!mbeanServer.isRegistered(new ObjectName(nextCpuPerc
+ .getObjectName())))
+ nextRegistered = mbeanServer.registerMBean(nextCpuPerc,
+ null);
+ } catch (Exception e) { // ignore
+ }
+ // add MBean to set of managed beans
+ if (nextRegistered != null)
+ managedBeans.add(nextRegistered.getObjectName());
+ nextRegistered = null;
+
+ // add CPU info bean
+ SigarCpuInfo nextCpuInfo = new SigarCpuInfo(sigarImpl, i);
+ try {
+ if (!mbeanServer.isRegistered(new ObjectName(nextCpuInfo
+ .getObjectName())))
+ nextRegistered = mbeanServer.registerMBean(nextCpuInfo,
+ null);
+ } catch (Exception e) { // ignore
+ }
+ // add MBean to set of managed beans
+ if (nextRegistered != null)
+ managedBeans.add(nextRegistered.getObjectName());
+ nextRegistered = null;
+ }
+
+ } catch (SigarException e) {
+ throw unexpectedError("CpuInfoList", e);
+ }
+ }
+
+ /**
+ * Registers MBeans for the Sigar types Mem
and Swap
.
+ */
+ private void registerMemoryBeans() {
+
+ ObjectInstance nextRegistered = null;
+
+ // add physical memory bean
+ SigarMem mem = new SigarMem(sigarImpl);
+
+ try {
+ if (!mbeanServer.isRegistered(new ObjectName(mem.getObjectName())))
+ nextRegistered = mbeanServer.registerMBean(mem, null);
+ } catch (Exception e) { // ignore
+ }
+
+ // add MBean to set of managed beans
+ if (nextRegistered != null)
+ managedBeans.add(nextRegistered.getObjectName());
+ nextRegistered = null;
+
+ // add swap memory bean
+ SigarSwap swap = new SigarSwap(sigarImpl);
+ try {
+ if (!mbeanServer.isRegistered(new ObjectName(swap.getObjectName())))
+ nextRegistered = mbeanServer.registerMBean(swap, null);
+ } catch (Exception e) { // ignore
+ nextRegistered = null;
+ }
+
+ // add MBean to set of managed beans
+ if (nextRegistered != null)
+ managedBeans.add(nextRegistered.getObjectName());
+ nextRegistered = null;
+ }
+
+ /**
+ * Registers MBeans for the Sigar types LoadAverage
...
+ */
+ private void registerSystemBeans() {
+
+ ObjectInstance nextRegistered = null;
+
+ // add load average bean
+ SigarLoadAverage loadAvg = new SigarLoadAverage(sigarImpl);
+
+ try {
+ if (!mbeanServer.isRegistered(new ObjectName(loadAvg
+ .getObjectName())))
+ nextRegistered = mbeanServer.registerMBean(loadAvg, null);
+ } catch (Exception e) { // ignore
+ }
+
+ // add MBean to set of managed beans
+ if (nextRegistered != null)
+ managedBeans.add(nextRegistered.getObjectName());
+ nextRegistered = null;
+ }
+
+ /**
+ * Deregisters all Sigar MBeans that were created and registered using this
+ * instance. After doing so, a super call is made to satisfy {@link AbstractMBean}.
+ * @throws Exception
+ *
+ * @see AbstractMBean#preDeregister()
+ */
+ public void preDeregister() throws Exception {
+
+ // count backwards to remove ONs immediately
+ for (int i = managedBeans.size() - 1; i >= 0; i--) {
+ ObjectName next = (ObjectName) managedBeans.remove(i);
+ if (mbeanServer.isRegistered(next)) {
+ try {
+ mbeanServer.unregisterMBean(next);
+ } catch (Exception e) { // ignore
+ }
+ }
+ }
+
+ // do the super call
+ super.preDeregister();
+ }
}
diff --git a/bindings/java/src/org/hyperic/sigar/jmx/SigarSwap.java b/bindings/java/src/org/hyperic/sigar/jmx/SigarSwap.java
index 8ce05816..c209d32f 100644
--- a/bindings/java/src/org/hyperic/sigar/jmx/SigarSwap.java
+++ b/bindings/java/src/org/hyperic/sigar/jmx/SigarSwap.java
@@ -35,174 +35,165 @@ import org.hyperic.sigar.SigarException;
* package. Provides an OpenMBean conform implementation.
*
* @author Bjoern Martin
- * @since 1.4 (2007-04)
+ * @since 1.5
*/
public class SigarSwap extends AbstractMBean {
- private static final String MBEAN_TYPE = "Swap";
+ private static final String MBEAN_TYPE = "Swap";
- private static final MBeanInfo MBEAN_INFO;
-
- private static final MBeanAttributeInfo MBEAN_ATTR_FREE;
+ private static final MBeanInfo MBEAN_INFO;
- private static final MBeanAttributeInfo MBEAN_ATTR_TOTAL;
+ private static final MBeanAttributeInfo MBEAN_ATTR_FREE;
- private static final MBeanAttributeInfo MBEAN_ATTR_USED;
+ private static final MBeanAttributeInfo MBEAN_ATTR_TOTAL;
- private static final MBeanConstructorInfo MBEAN_CONSTR_SIGAR;
+ private static final MBeanAttributeInfo MBEAN_ATTR_USED;
- private static MBeanParameterInfo MBEAN_PARAM_SIGAR;
-
- static {
- MBEAN_ATTR_FREE = new MBeanAttributeInfo(
- "Free", "long",
- "The amount of free swap memory, in [bytes]",
- true, false, false);
- MBEAN_ATTR_TOTAL = new MBeanAttributeInfo(
- "Total", "long",
- "The total amount of swap memory, in [bytes]",
- true, false, false);
- MBEAN_ATTR_USED = new MBeanAttributeInfo(
- "Used", "long",
- "The amount of swap memory in use, in [bytes]",
- true, false, false);
- MBEAN_PARAM_SIGAR = new MBeanParameterInfo(
- "sigar", Sigar.class.getName(),
- "The Sigar instance to use to fetch data from");
- MBEAN_CONSTR_SIGAR = new MBeanConstructorInfo(
- SigarSwap.class.getName(),
- "Creates a new instance, using the Sigar instance " +
- "specified to fetch the data.",
- new MBeanParameterInfo[]{
- MBEAN_PARAM_SIGAR});
- MBEAN_INFO = new MBeanInfo(
- SigarSwap.class.getName(),
- "Sigar Swap MBean, provides raw data for the swap memory " +
- "configured on the system. Uses an internal cache that " +
- "invalidates within 5 seconds.",
- new MBeanAttributeInfo[]{
- MBEAN_ATTR_FREE,
- MBEAN_ATTR_TOTAL,
- MBEAN_ATTR_USED},
- new MBeanConstructorInfo[]{
- MBEAN_CONSTR_SIGAR},
- null, null);
-
- }
-
- /**
- * Object name this instance will give itself when being registered to an
- * MBeanServer.
- */
- private final String objectName;
+ private static final MBeanConstructorInfo MBEAN_CONSTR_SIGAR;
- /**
- * Creates a new instance, using the Sigar instance specified to fetch the
- * data.
- *
- * @param sigar
- * The Sigar instance to use to fetch data from
- *
- * @throws IllegalArgumentException
- * If an unexpected Sigar error occurs
- */
- public SigarSwap(Sigar sigar) throws IllegalArgumentException {
- super(sigar, CACHED_5SEC);
+ private static MBeanParameterInfo MBEAN_PARAM_SIGAR;
- this.objectName = SigarInvokerJMX.DOMAIN_NAME + ":" + MBEAN_ATTR_TYPE
- + "=Swap";
- }
+ static {
+ MBEAN_ATTR_FREE = new MBeanAttributeInfo("Free", "long",
+ "The amount of free swap memory, in [bytes]", true, false,
+ false);
+ MBEAN_ATTR_TOTAL = new MBeanAttributeInfo("Total", "long",
+ "The total amount of swap memory, in [bytes]", true, false,
+ false);
+ MBEAN_ATTR_USED = new MBeanAttributeInfo("Used", "long",
+ "The amount of swap memory in use, in [bytes]", true, false,
+ false);
+ MBEAN_PARAM_SIGAR = new MBeanParameterInfo("sigar", Sigar.class
+ .getName(), "The Sigar instance to use to fetch data from");
+ MBEAN_CONSTR_SIGAR = new MBeanConstructorInfo(
+ SigarSwap.class.getName(),
+ "Creates a new instance, using the Sigar instance "
+ + "specified to fetch the data.",
+ new MBeanParameterInfo[] { MBEAN_PARAM_SIGAR });
+ MBEAN_INFO = new MBeanInfo(
+ SigarSwap.class.getName(),
+ "Sigar Swap MBean, provides raw data for the swap memory "
+ + "configured on the system. Uses an internal cache that "
+ + "invalidates within 5 seconds.",
+ new MBeanAttributeInfo[] { MBEAN_ATTR_FREE, MBEAN_ATTR_TOTAL,
+ MBEAN_ATTR_USED },
+ new MBeanConstructorInfo[] { MBEAN_CONSTR_SIGAR }, null, null);
- /**
- * Object name this instance will give itself when being registered to an
- * MBeanServer.
- */
- public String getObjectName() {
- return this.objectName;
- }
+ }
- /**
- * @return The amount of free swap memory, in [bytes]
- */
- public long getFree() {
- try {
- return sigar.getSwap().getFree();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
+ /**
+ * Object name this instance will give itself when being registered to an
+ * MBeanServer.
+ */
+ private final String objectName;
- /**
- * @return The total amount of swap memory, in [bytes]
- */
- public long getTotal() {
- try {
- return sigar.getSwap().getTotal();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
+ /**
+ * Creates a new instance, using the Sigar instance specified to fetch the
+ * data.
+ *
+ * @param sigar
+ * The Sigar instance to use to fetch data from
+ *
+ * @throws IllegalArgumentException
+ * If an unexpected Sigar error occurs
+ */
+ public SigarSwap(Sigar sigar) throws IllegalArgumentException {
+ super(sigar, CACHED_5SEC);
- /**
- * @return The amount of swap memory in use, in [bytes]
- */
- public long getUsed() {
- try {
- return sigar.getSwap().getUsed();
- } catch (SigarException e) {
- throw unexpectedError(MBEAN_TYPE, e);
- }
- }
+ this.objectName = SigarInvokerJMX.DOMAIN_NAME + ":" + MBEAN_ATTR_TYPE
+ + "=Swap";
+ }
- // -------
- // Implementation of the DynamicMBean interface
- // -------
+ /**
+ * Object name this instance will give itself when being registered to an
+ * MBeanServer.
+ */
+ public String getObjectName() {
+ return this.objectName;
+ }
- /*
- * (non-Javadoc)
- *
- * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
- */
- public Object getAttribute(String attr) throws AttributeNotFoundException,
- MBeanException, ReflectionException {
- if (MBEAN_ATTR_FREE.getName().equals(attr)) {
- return new Long(getFree());
+ /**
+ * @return The amount of free swap memory, in [bytes]
+ */
+ public long getFree() {
+ try {
+ return sigar.getSwap().getFree();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
- } else if (MBEAN_ATTR_TOTAL.getName().equals(attr)) {
- return new Long(getTotal());
+ /**
+ * @return The total amount of swap memory, in [bytes]
+ */
+ public long getTotal() {
+ try {
+ return sigar.getSwap().getTotal();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
- } else if (MBEAN_ATTR_USED.getName().equals(attr)) {
- return new Long(getUsed());
+ /**
+ * @return The amount of swap memory in use, in [bytes]
+ */
+ public long getUsed() {
+ try {
+ return sigar.getSwap().getUsed();
+ } catch (SigarException e) {
+ throw unexpectedError(MBEAN_TYPE, e);
+ }
+ }
- } else {
- throw new AttributeNotFoundException(attr);
- }
- }
+ // -------
+ // Implementation of the DynamicMBean interface
+ // -------
- /*
- * (non-Javadoc)
- * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
- */
- public void setAttribute(Attribute attr) throws AttributeNotFoundException {
- throw new AttributeNotFoundException(attr.getName());
- }
+ /*
+ * (non-Javadoc)
+ *
+ * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
+ */
+ public Object getAttribute(String attr) throws AttributeNotFoundException,
+ MBeanException, ReflectionException {
+ if (MBEAN_ATTR_FREE.getName().equals(attr)) {
+ return new Long(getFree());
- /*
- * (non-Javadoc)
- * @see javax.management.DynamicMBean#invoke(java.lang.String,
- * java.lang.Object[], java.lang.String[])
- */
- public Object invoke(String actionName, Object[] params, String[] signature)
- throws ReflectionException {
- throw new ReflectionException(new NoSuchMethodException(actionName),
- actionName);
- }
+ } else if (MBEAN_ATTR_TOTAL.getName().equals(attr)) {
+ return new Long(getTotal());
- /*
- * (non-Javadoc)
- * @see javax.management.DynamicMBean#getMBeanInfo()
- */
- public MBeanInfo getMBeanInfo() {
- return MBEAN_INFO;
- }
+ } else if (MBEAN_ATTR_USED.getName().equals(attr)) {
+ return new Long(getUsed());
+
+ } else {
+ throw new AttributeNotFoundException(attr);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
+ */
+ public void setAttribute(Attribute attr) throws AttributeNotFoundException {
+ throw new AttributeNotFoundException(attr.getName());
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see javax.management.DynamicMBean#invoke(java.lang.String,
+ * java.lang.Object[], java.lang.String[])
+ */
+ public Object invoke(String actionName, Object[] params, String[] signature)
+ throws ReflectionException {
+ throw new ReflectionException(new NoSuchMethodException(actionName),
+ actionName);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see javax.management.DynamicMBean#getMBeanInfo()
+ */
+ public MBeanInfo getMBeanInfo() {
+ return MBEAN_INFO;
+ }
}