dos2unix
This commit is contained in:
		
							parent
							
								
									2e3c302f4f
								
							
						
					
					
						commit
						7a5288278c
					
				@ -1,268 +1,268 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright (C) [2004, 2005, 2006, 2007], Hyperic, Inc.
 | 
					 * Copyright (C) [2004, 2005, 2006, 2007], Hyperic, Inc.
 | 
				
			||||||
 * This file is part of SIGAR.
 | 
					 * This file is part of SIGAR.
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * SIGAR is free software; you can redistribute it and/or modify
 | 
					 * SIGAR is free software; you can redistribute it and/or modify
 | 
				
			||||||
 * it under the terms version 2 of the GNU General Public License as
 | 
					 * it under the terms version 2 of the GNU General Public License as
 | 
				
			||||||
 * published by the Free Software Foundation. This program is distributed
 | 
					 * published by the Free Software Foundation. This program is distributed
 | 
				
			||||||
 * in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 | 
					 * in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 | 
				
			||||||
 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 | 
					 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 | 
				
			||||||
 * PARTICULAR PURPOSE. See the GNU General Public License for more
 | 
					 * PARTICULAR PURPOSE. See the GNU General Public License for more
 | 
				
			||||||
 * details.
 | 
					 * details.
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * You should have received a copy of the GNU General Public License
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 * along with this program; if not, write to the Free Software
 | 
					 * along with this program; if not, write to the Free Software
 | 
				
			||||||
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 | 
					 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 | 
				
			||||||
 * USA.
 | 
					 * USA.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package org.hyperic.sigar.jmx;
 | 
					package org.hyperic.sigar.jmx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import javax.management.Attribute;
 | 
					import javax.management.Attribute;
 | 
				
			||||||
import javax.management.AttributeList;
 | 
					import javax.management.AttributeList;
 | 
				
			||||||
import javax.management.AttributeNotFoundException;
 | 
					import javax.management.AttributeNotFoundException;
 | 
				
			||||||
import javax.management.DynamicMBean;
 | 
					import javax.management.DynamicMBean;
 | 
				
			||||||
import javax.management.InvalidAttributeValueException;
 | 
					import javax.management.InvalidAttributeValueException;
 | 
				
			||||||
import javax.management.MBeanException;
 | 
					import javax.management.MBeanException;
 | 
				
			||||||
import javax.management.MBeanRegistration;
 | 
					import javax.management.MBeanRegistration;
 | 
				
			||||||
import javax.management.MBeanServer;
 | 
					import javax.management.MBeanServer;
 | 
				
			||||||
import javax.management.ObjectName;
 | 
					import javax.management.ObjectName;
 | 
				
			||||||
import javax.management.ReflectionException;
 | 
					import javax.management.ReflectionException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.hyperic.sigar.Sigar;
 | 
					import org.hyperic.sigar.Sigar;
 | 
				
			||||||
import org.hyperic.sigar.SigarException;
 | 
					import org.hyperic.sigar.SigarException;
 | 
				
			||||||
import org.hyperic.sigar.SigarProxy;
 | 
					import org.hyperic.sigar.SigarProxy;
 | 
				
			||||||
import org.hyperic.sigar.SigarProxyCache;
 | 
					import org.hyperic.sigar.SigarProxyCache;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Base class for all Sigar JMX MBeans. Provides a skeleton which handles
 | 
					 * Base class for all Sigar JMX MBeans. Provides a skeleton which handles
 | 
				
			||||||
 * creation of the Sigar proxy instance and provides some convenience methods.
 | 
					 * creation of the Sigar proxy instance and provides some convenience methods.
 | 
				
			||||||
 * It also enforces usage of the {@link DynamicMBean} inferface while
 | 
					 * It also enforces usage of the {@link DynamicMBean} inferface while
 | 
				
			||||||
 * implementing part of it, and it adds empty implementations for all methods of
 | 
					 * implementing part of it, and it adds empty implementations for all methods of
 | 
				
			||||||
 * the {@link MBeanRegistration} interface, allowing subclasses to only
 | 
					 * the {@link MBeanRegistration} interface, allowing subclasses to only
 | 
				
			||||||
 * implement subset of them.
 | 
					 * implement subset of them.
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * @author Bjoern Martin
 | 
					 * @author Bjoern Martin
 | 
				
			||||||
 * @since 1.5
 | 
					 * @since 1.5
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public abstract class AbstractMBean implements DynamicMBean, MBeanRegistration {
 | 
					public abstract class AbstractMBean implements DynamicMBean, MBeanRegistration {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected static final String MBEAN_ATTR_TYPE = "type";
 | 
					    protected static final String MBEAN_ATTR_TYPE = "type";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected static final short CACHED_30SEC = 0;
 | 
					    protected static final short CACHED_30SEC = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected static final short CACHED_5SEC = 1;
 | 
					    protected static final short CACHED_5SEC = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected static final short CACHED_500MS = 2;
 | 
					    protected static final short CACHED_500MS = 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected static final short CACHELESS = 3;
 | 
					    protected static final short CACHELESS = 3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected static final short DEFAULT = CACHED_30SEC;
 | 
					    protected static final short DEFAULT = CACHED_30SEC;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * The Sigar implementation to be used to fetch information from the system.
 | 
					     * The Sigar implementation to be used to fetch information from the system.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    protected final Sigar sigarImpl;
 | 
					    protected final Sigar sigarImpl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * The Sigar proxy cache to be used in case the data does not have to be 
 | 
					     * The Sigar proxy cache to be used in case the data does not have to be 
 | 
				
			||||||
     * fetched during each call. The cache timeout is decided during 
 | 
					     * fetched during each call. The cache timeout is decided during 
 | 
				
			||||||
     * construction. See {@link AbstractMBean#AbstractMBean(Sigar, short)} for 
 | 
					     * construction. See {@link AbstractMBean#AbstractMBean(Sigar, short)} for 
 | 
				
			||||||
     * details.
 | 
					     * details.
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * @see AbstractMBean#AbstractMBean(Sigar, short)
 | 
					     * @see AbstractMBean#AbstractMBean(Sigar, short)
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    protected final SigarProxy sigar;
 | 
					    protected final SigarProxy sigar;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * The MBean server this MBean is registered to. Set during the MBean's 
 | 
					     * The MBean server this MBean is registered to. Set during the MBean's 
 | 
				
			||||||
     * registration to the MBean server and unset to <code>null</code> when
 | 
					     * registration to the MBean server and unset to <code>null</code> when
 | 
				
			||||||
     * the deregistration finished.
 | 
					     * the deregistration finished.
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * @see #preRegister(MBeanServer, ObjectName)
 | 
					     * @see #preRegister(MBeanServer, ObjectName)
 | 
				
			||||||
     * @see #postDeregister()
 | 
					     * @see #postDeregister()
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    protected MBeanServer mbeanServer;
 | 
					    protected MBeanServer mbeanServer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * <p>Creates a new instance of this class. The Sigar instance is stored (and 
 | 
					     * <p>Creates a new instance of this class. The Sigar instance is stored (and 
 | 
				
			||||||
     * accessible) via the {@link #sigarImpl} member. A second instance is 
 | 
					     * accessible) via the {@link #sigarImpl} member. A second instance is 
 | 
				
			||||||
     * stored within the {@link #sigar} member which is either {@link #sigarImpl}
 | 
					     * stored within the {@link #sigar} member which is either {@link #sigarImpl}
 | 
				
			||||||
     * or an instance of {@link SigarProxyCache} with the expiration time set to 
 | 
					     * or an instance of {@link SigarProxyCache} with the expiration time set to 
 | 
				
			||||||
     * whatever the <code>cacheMode</code> parameter specifies.</p>
 | 
					     * whatever the <code>cacheMode</code> parameter specifies.</p>
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * <p>The following cache modes exist:</p>
 | 
					     * <p>The following cache modes exist:</p>
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * <table border = "1">
 | 
					     * <table border = "1">
 | 
				
			||||||
     * <tr><td><b>Constant</b></td><td><b>Description</b></td></tr>
 | 
					     * <tr><td><b>Constant</b></td><td><b>Description</b></td></tr>
 | 
				
			||||||
     * <tr><td>{@link #CACHELESS}</td><td>No cached instance, {@link #sigar} 
 | 
					     * <tr><td>{@link #CACHELESS}</td><td>No cached instance, {@link #sigar} 
 | 
				
			||||||
     *         <code>==</code> {@link #sigarImpl}.</td></tr>
 | 
					     *         <code>==</code> {@link #sigarImpl}.</td></tr>
 | 
				
			||||||
     * <tr><td>{@link #CACHED_500MS}</td><td>500 millisecond cache, for high 
 | 
					     * <tr><td>{@link #CACHED_500MS}</td><td>500 millisecond cache, for high 
 | 
				
			||||||
     *         frequency queries on raw data such as reading out CPU timers each 
 | 
					     *         frequency queries on raw data such as reading out CPU timers each 
 | 
				
			||||||
     *         second. Avoids reading out multiple data sets when all attributes of 
 | 
					     *         second. Avoids reading out multiple data sets when all attributes of 
 | 
				
			||||||
     *         an MBean are queried in short sequence.</td></tr>
 | 
					     *         an MBean are queried in short sequence.</td></tr>
 | 
				
			||||||
     * <tr><td>{@link #CACHED_5SEC}</td><td>5 second cache, for high frequency 
 | 
					     * <tr><td>{@link #CACHED_5SEC}</td><td>5 second cache, for high frequency 
 | 
				
			||||||
     *         queries on calculated data such as CPU percentages.</td></tr>
 | 
					     *         queries on calculated data such as CPU percentages.</td></tr>
 | 
				
			||||||
     * <tr><td>{@link #CACHED_30SEC}</td><td>30 second cache, for normal queries 
 | 
					     * <tr><td>{@link #CACHED_30SEC}</td><td>30 second cache, for normal queries 
 | 
				
			||||||
     *         or data readouts such as CPU model / vendor. This is the default if 
 | 
					     *         or data readouts such as CPU model / vendor. This is the default if 
 | 
				
			||||||
     *         nothing (<code>0</code>) is specified.</td></tr>
 | 
					     *         nothing (<code>0</code>) is specified.</td></tr>
 | 
				
			||||||
     * <tr><td>{@link #DEFAULT}</td><td>Same as {@link #CACHED_30SEC}.</td></tr>
 | 
					     * <tr><td>{@link #DEFAULT}</td><td>Same as {@link #CACHED_30SEC}.</td></tr>
 | 
				
			||||||
     * </table>
 | 
					     * </table>
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * <p><b>Note:</b> Only make use of the cacheless or half second mode if you 
 | 
					     * <p><b>Note:</b> 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 
 | 
					     * know what you are doing. They may have impact on system performance if 
 | 
				
			||||||
     * used excessively.</p>
 | 
					     * used excessively.</p>
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * @param sigar The Sigar impl to use. Must not be <code>null</code>
 | 
					     * @param sigar The Sigar impl to use. Must not be <code>null</code>
 | 
				
			||||||
     * @param cacheMode The cache mode to use for {@link #sigar} or {@link #CACHELESS}
 | 
					     * @param cacheMode The cache mode to use for {@link #sigar} or {@link #CACHELESS}
 | 
				
			||||||
     *         if no separate, cached instance is to be maintained.
 | 
					     *         if no separate, cached instance is to be maintained.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    protected AbstractMBean(Sigar sigar, short cacheMode) {
 | 
					    protected AbstractMBean(Sigar sigar, short cacheMode) {
 | 
				
			||||||
        // store Sigar
 | 
					        // store Sigar
 | 
				
			||||||
        this.sigarImpl = sigar;
 | 
					        this.sigarImpl = sigar;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // create a cached instance as well
 | 
					        // create a cached instance as well
 | 
				
			||||||
        if (cacheMode == CACHELESS) {
 | 
					        if (cacheMode == CACHELESS) {
 | 
				
			||||||
            // no cached version
 | 
					            // no cached version
 | 
				
			||||||
            this.sigar = this.sigarImpl;
 | 
					            this.sigar = this.sigarImpl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        } else if (cacheMode == CACHED_500MS) {
 | 
					        } else if (cacheMode == CACHED_500MS) {
 | 
				
			||||||
            // 500ms cached version (for 1/sec queries)
 | 
					            // 500ms cached version (for 1/sec queries)
 | 
				
			||||||
            this.sigar = SigarProxyCache.newInstance(this.sigarImpl, 500);
 | 
					            this.sigar = SigarProxyCache.newInstance(this.sigarImpl, 500);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        } else if (cacheMode == CACHED_5SEC) {
 | 
					        } else if (cacheMode == CACHED_5SEC) {
 | 
				
			||||||
            // 5sec cached version (for avg'd queries)
 | 
					            // 5sec cached version (for avg'd queries)
 | 
				
			||||||
            this.sigar = SigarProxyCache.newInstance(this.sigarImpl, 5000);
 | 
					            this.sigar = SigarProxyCache.newInstance(this.sigarImpl, 5000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        } else /* if (cacheMode == CACHED_30SEC) */{
 | 
					        } else /* if (cacheMode == CACHED_30SEC) */{
 | 
				
			||||||
            // 30sec (default) cached version (for info and long term queries)
 | 
					            // 30sec (default) cached version (for info and long term queries)
 | 
				
			||||||
            this.sigar = SigarProxyCache.newInstance(this.sigarImpl, 30000);
 | 
					            this.sigar = SigarProxyCache.newInstance(this.sigarImpl, 30000);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Returns the object name the MBean is registered with within the
 | 
					     * Returns the object name the MBean is registered with within the
 | 
				
			||||||
     * MBeanServer. May be <code>null</code> in case the instance is not
 | 
					     * MBeanServer. May be <code>null</code> in case the instance is not
 | 
				
			||||||
     * registered to an MBeanServer, but used standalone.
 | 
					     * registered to an MBeanServer, but used standalone.
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * @return The object name or <code>null</code> if not registered to an
 | 
					     * @return The object name or <code>null</code> if not registered to an
 | 
				
			||||||
     *         MBeanServer
 | 
					     *         MBeanServer
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public abstract String getObjectName();
 | 
					    public abstract String getObjectName();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Returns a runtime exception for the type and SigarException specified.
 | 
					     * Returns a runtime exception for the type and SigarException specified.
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * @param type
 | 
					     * @param type
 | 
				
			||||||
     *            The type that was called
 | 
					     *            The type that was called
 | 
				
			||||||
     * @param e
 | 
					     * @param e
 | 
				
			||||||
     *            The exception that was raised
 | 
					     *            The exception that was raised
 | 
				
			||||||
     * @return A runtime exception encapsulating the information specified
 | 
					     * @return A runtime exception encapsulating the information specified
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    protected RuntimeException unexpectedError(String type, SigarException e) {
 | 
					    protected RuntimeException unexpectedError(String type, SigarException e) {
 | 
				
			||||||
        String msg = "Unexected error in Sigar.get" + type + ": "
 | 
					        String msg = "Unexected error in Sigar.get" + type + ": "
 | 
				
			||||||
                + e.getMessage();
 | 
					                + e.getMessage();
 | 
				
			||||||
        return new IllegalArgumentException(msg);
 | 
					        return new IllegalArgumentException(msg);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Loops over all attributes and calls
 | 
					     * Loops over all attributes and calls
 | 
				
			||||||
     * {@link DynamicMBean#getAttribute(java.lang.String)} method for each
 | 
					     * {@link DynamicMBean#getAttribute(java.lang.String)} method for each
 | 
				
			||||||
     * attribute sequentially. Any exception thrown by those methods are ignored
 | 
					     * attribute sequentially. Any exception thrown by those methods are ignored
 | 
				
			||||||
     * and simply cause the attribute not being added to the result.
 | 
					     * and simply cause the attribute not being added to the result.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public AttributeList getAttributes(String[] attrs) {
 | 
					    public AttributeList getAttributes(String[] attrs) {
 | 
				
			||||||
        final AttributeList result = new AttributeList();
 | 
					        final AttributeList result = new AttributeList();
 | 
				
			||||||
        for (int i = 0; i < attrs.length; i++) {
 | 
					        for (int i = 0; i < attrs.length; i++) {
 | 
				
			||||||
            try {
 | 
					            try {
 | 
				
			||||||
                result.add(new Attribute(attrs[i], getAttribute(attrs[i])));
 | 
					                result.add(new Attribute(attrs[i], getAttribute(attrs[i])));
 | 
				
			||||||
            } catch (AttributeNotFoundException e) {
 | 
					            } catch (AttributeNotFoundException e) {
 | 
				
			||||||
                // ignore, as we cannot throw this exception
 | 
					                // ignore, as we cannot throw this exception
 | 
				
			||||||
            } catch (MBeanException e) {
 | 
					            } catch (MBeanException e) {
 | 
				
			||||||
                // ignore, as we cannot throw this exception
 | 
					                // ignore, as we cannot throw this exception
 | 
				
			||||||
            } catch (ReflectionException e) {
 | 
					            } catch (ReflectionException e) {
 | 
				
			||||||
                // ignore, as we cannot throw this exception
 | 
					                // ignore, as we cannot throw this exception
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return result;
 | 
					        return result;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Loops over all attributes and calls
 | 
					     * Loops over all attributes and calls
 | 
				
			||||||
     * {@link DynamicMBean#setAttribute(Attribute)} for each attribute
 | 
					     * {@link DynamicMBean#setAttribute(Attribute)} for each attribute
 | 
				
			||||||
     * sequentially. Any exception thrown by those methods are ignored and
 | 
					     * sequentially. Any exception thrown by those methods are ignored and
 | 
				
			||||||
     * simply cause the attribute not being added to the result.
 | 
					     * simply cause the attribute not being added to the result.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public AttributeList setAttributes(AttributeList attrs) {
 | 
					    public AttributeList setAttributes(AttributeList attrs) {
 | 
				
			||||||
        final AttributeList result = new AttributeList();
 | 
					        final AttributeList result = new AttributeList();
 | 
				
			||||||
        for (int i = 0; i < attrs.size(); i++) {
 | 
					        for (int i = 0; i < attrs.size(); i++) {
 | 
				
			||||||
            try {
 | 
					            try {
 | 
				
			||||||
                final Attribute next = (Attribute) attrs.get(i);
 | 
					                final Attribute next = (Attribute) attrs.get(i);
 | 
				
			||||||
                setAttribute(next);
 | 
					                setAttribute(next);
 | 
				
			||||||
                result.add(next);
 | 
					                result.add(next);
 | 
				
			||||||
            } catch (AttributeNotFoundException e) {
 | 
					            } catch (AttributeNotFoundException e) {
 | 
				
			||||||
                // ignore, as we cannot throw this exception
 | 
					                // ignore, as we cannot throw this exception
 | 
				
			||||||
            } catch (InvalidAttributeValueException e) {
 | 
					            } catch (InvalidAttributeValueException e) {
 | 
				
			||||||
                // ignore, as we cannot throw this exception
 | 
					                // ignore, as we cannot throw this exception
 | 
				
			||||||
            } catch (MBeanException e) {
 | 
					            } catch (MBeanException e) {
 | 
				
			||||||
                // ignore, as we cannot throw this exception
 | 
					                // ignore, as we cannot throw this exception
 | 
				
			||||||
            } catch (ReflectionException e) {
 | 
					            } catch (ReflectionException e) {
 | 
				
			||||||
                // ignore, as we cannot throw this exception
 | 
					                // ignore, as we cannot throw this exception
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return result;
 | 
					        return result;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // -------
 | 
					    // -------
 | 
				
			||||||
    // Implementation of the MBeanRegistration interface
 | 
					    // Implementation of the MBeanRegistration interface
 | 
				
			||||||
    // -------
 | 
					    // -------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * <p>Returns <code>new ObjectName(this.getObjectName())</code> to guarantee 
 | 
					     * <p>Returns <code>new ObjectName(this.getObjectName())</code> to guarantee 
 | 
				
			||||||
     * a reliable and reproducable object name.</p>
 | 
					     * a reliable and reproducable object name.</p>
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * <p><b>Note:</b> Make sure any subclass does a super call to this method, 
 | 
					     * <p><b>Note:</b> Make sure any subclass does a super call to this method, 
 | 
				
			||||||
     * otherwise the implementation might be broken.</p>
 | 
					     * otherwise the implementation might be broken.</p>
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * @see MBeanRegistration#preRegister(MBeanServer, ObjectName)
 | 
					     * @see MBeanRegistration#preRegister(MBeanServer, ObjectName)
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public ObjectName preRegister(MBeanServer server, ObjectName name)
 | 
					    public ObjectName preRegister(MBeanServer server, ObjectName name)
 | 
				
			||||||
            throws Exception {
 | 
					            throws Exception {
 | 
				
			||||||
        this.mbeanServer = server;
 | 
					        this.mbeanServer = server;
 | 
				
			||||||
        return new ObjectName(getObjectName());
 | 
					        return new ObjectName(getObjectName());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Empty implementation, allowing aubclasses to ignore the interface.
 | 
					     * Empty implementation, allowing aubclasses to ignore the interface.
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * <p><b>Note:</b> Make sure any subclass does a super call to this method, 
 | 
					     * <p><b>Note:</b> Make sure any subclass does a super call to this method, 
 | 
				
			||||||
     * otherwise the implementation might be broken.</p>
 | 
					     * otherwise the implementation might be broken.</p>
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * @see MBeanRegistration#postRegister(Boolean)
 | 
					     * @see MBeanRegistration#postRegister(Boolean)
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public void postRegister(Boolean success) {
 | 
					    public void postRegister(Boolean success) {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Empty implementation, allowing aubclasses to ignore the interface.
 | 
					     * Empty implementation, allowing aubclasses to ignore the interface.
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * <p><b>Note:</b> Make sure any subclass does a super call to this method, 
 | 
					     * <p><b>Note:</b> Make sure any subclass does a super call to this method, 
 | 
				
			||||||
     * otherwise the implementation might be broken.</p>
 | 
					     * otherwise the implementation might be broken.</p>
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * @see MBeanRegistration#preDeregister()
 | 
					     * @see MBeanRegistration#preDeregister()
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public void preDeregister() throws Exception {
 | 
					    public void preDeregister() throws Exception {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Empty implementation, allowing aubclasses to ignore the interface.
 | 
					     * Empty implementation, allowing aubclasses to ignore the interface.
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * <p><b>Note:</b> Make sure any subclass does a super call to this method, 
 | 
					     * <p><b>Note:</b> Make sure any subclass does a super call to this method, 
 | 
				
			||||||
     * otherwise the implementation might be broken.</p>
 | 
					     * otherwise the implementation might be broken.</p>
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * @see MBeanRegistration#postDeregister()
 | 
					     * @see MBeanRegistration#postDeregister()
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public void postDeregister() {
 | 
					    public void postDeregister() {
 | 
				
			||||||
        this.mbeanServer = null;
 | 
					        this.mbeanServer = null;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,263 +1,263 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright (C) [2004, 2005, 2006, 2007], Hyperic, Inc.
 | 
					 * Copyright (C) [2004, 2005, 2006, 2007], Hyperic, Inc.
 | 
				
			||||||
 * This file is part of SIGAR.
 | 
					 * This file is part of SIGAR.
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * SIGAR is free software; you can redistribute it and/or modify
 | 
					 * SIGAR is free software; you can redistribute it and/or modify
 | 
				
			||||||
 * it under the terms version 2 of the GNU General Public License as
 | 
					 * it under the terms version 2 of the GNU General Public License as
 | 
				
			||||||
 * published by the Free Software Foundation. This program is distributed
 | 
					 * published by the Free Software Foundation. This program is distributed
 | 
				
			||||||
 * in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 | 
					 * in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 | 
				
			||||||
 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 | 
					 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 | 
				
			||||||
 * PARTICULAR PURPOSE. See the GNU General Public License for more
 | 
					 * PARTICULAR PURPOSE. See the GNU General Public License for more
 | 
				
			||||||
 * details.
 | 
					 * details.
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * You should have received a copy of the GNU General Public License
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 * along with this program; if not, write to the Free Software
 | 
					 * along with this program; if not, write to the Free Software
 | 
				
			||||||
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 | 
					 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 | 
				
			||||||
 * USA.
 | 
					 * USA.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package org.hyperic.sigar.jmx;
 | 
					package org.hyperic.sigar.jmx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import javax.management.Attribute;
 | 
					import javax.management.Attribute;
 | 
				
			||||||
import javax.management.AttributeNotFoundException;
 | 
					import javax.management.AttributeNotFoundException;
 | 
				
			||||||
import javax.management.MBeanAttributeInfo;
 | 
					import javax.management.MBeanAttributeInfo;
 | 
				
			||||||
import javax.management.MBeanConstructorInfo;
 | 
					import javax.management.MBeanConstructorInfo;
 | 
				
			||||||
import javax.management.MBeanInfo;
 | 
					import javax.management.MBeanInfo;
 | 
				
			||||||
import javax.management.MBeanParameterInfo;
 | 
					import javax.management.MBeanParameterInfo;
 | 
				
			||||||
import javax.management.ReflectionException;
 | 
					import javax.management.ReflectionException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.hyperic.sigar.Sigar;
 | 
					import org.hyperic.sigar.Sigar;
 | 
				
			||||||
import org.hyperic.sigar.SigarException;
 | 
					import org.hyperic.sigar.SigarException;
 | 
				
			||||||
import org.hyperic.sigar.SigarNotImplementedException;
 | 
					import org.hyperic.sigar.SigarNotImplementedException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Sigar JMX MBean implementation for the <code>LoadAverage</code> information
 | 
					 * Sigar JMX MBean implementation for the <code>LoadAverage</code> information
 | 
				
			||||||
 * package. Provides an OpenMBean conform implementation.
 | 
					 * package. Provides an OpenMBean conform implementation.
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * @author Bjoern Martin
 | 
					 * @author Bjoern Martin
 | 
				
			||||||
 * @since 1.5
 | 
					 * @since 1.5
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public class SigarLoadAverage extends AbstractMBean {
 | 
					public class SigarLoadAverage extends AbstractMBean {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final String MBEAN_TYPE = "LoadAverage";
 | 
					    private static final String MBEAN_TYPE = "LoadAverage";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Returned if {@link Sigar#getLoadAverage()}} is detected to be not
 | 
					     * Returned if {@link Sigar#getLoadAverage()}} is detected to be not
 | 
				
			||||||
     * implemented on the platform.
 | 
					     * implemented on the platform.
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * @see #notImplemented
 | 
					     * @see #notImplemented
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private static final double NOT_IMPLEMENTED_LOAD_VALUE = -1.0d;
 | 
					    private static final double NOT_IMPLEMENTED_LOAD_VALUE = -1.0d;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final MBeanInfo MBEAN_INFO;
 | 
					    private static final MBeanInfo MBEAN_INFO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final MBeanAttributeInfo MBEAN_ATTR_LAST1MIN;
 | 
					    private static final MBeanAttributeInfo MBEAN_ATTR_LAST1MIN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final MBeanAttributeInfo MBEAN_ATTR_LAST5MIN;
 | 
					    private static final MBeanAttributeInfo MBEAN_ATTR_LAST5MIN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final MBeanAttributeInfo MBEAN_ATTR_LAST15MIN;
 | 
					    private static final MBeanAttributeInfo MBEAN_ATTR_LAST15MIN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final MBeanConstructorInfo MBEAN_CONSTR_SIGAR;
 | 
					    private static final MBeanConstructorInfo MBEAN_CONSTR_SIGAR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static MBeanParameterInfo MBEAN_PARAM_SIGAR;
 | 
					    private static MBeanParameterInfo MBEAN_PARAM_SIGAR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static {
 | 
					    static {
 | 
				
			||||||
        MBEAN_ATTR_LAST1MIN = new MBeanAttributeInfo(
 | 
					        MBEAN_ATTR_LAST1MIN = new MBeanAttributeInfo(
 | 
				
			||||||
                "LastMinute",
 | 
					                "LastMinute",
 | 
				
			||||||
                "double",
 | 
					                "double",
 | 
				
			||||||
                "The load average in the last minute, as a fraction of 1, or "
 | 
					                "The load average in the last minute, as a fraction of 1, or "
 | 
				
			||||||
                        + "-1.0 if the load cannot be determined on this platform",
 | 
					                        + "-1.0 if the load cannot be determined on this platform",
 | 
				
			||||||
                true, false, false);
 | 
					                true, false, false);
 | 
				
			||||||
        MBEAN_ATTR_LAST5MIN = new MBeanAttributeInfo(
 | 
					        MBEAN_ATTR_LAST5MIN = new MBeanAttributeInfo(
 | 
				
			||||||
                "LastFiveMinutes",
 | 
					                "LastFiveMinutes",
 | 
				
			||||||
                "double",
 | 
					                "double",
 | 
				
			||||||
                "The load average over the last five minutes, as a fraction "
 | 
					                "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",
 | 
					                        + "of 1, or -1.0 if the load cannot be determined on this platform",
 | 
				
			||||||
                true, false, false);
 | 
					                true, false, false);
 | 
				
			||||||
        MBEAN_ATTR_LAST15MIN = new MBeanAttributeInfo(
 | 
					        MBEAN_ATTR_LAST15MIN = new MBeanAttributeInfo(
 | 
				
			||||||
                "Last15Minutes",
 | 
					                "Last15Minutes",
 | 
				
			||||||
                "double",
 | 
					                "double",
 | 
				
			||||||
                "The load average over the last 15 minutes, as a fraction of "
 | 
					                "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",
 | 
					                        + "1, or -1.0 if the load cannot be determined on this platform",
 | 
				
			||||||
                true, false, false);
 | 
					                true, false, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        MBEAN_PARAM_SIGAR = new MBeanParameterInfo("sigar", Sigar.class
 | 
					        MBEAN_PARAM_SIGAR = new MBeanParameterInfo("sigar", Sigar.class
 | 
				
			||||||
                .getName(), "The Sigar instance to use to fetch data from");
 | 
					                .getName(), "The Sigar instance to use to fetch data from");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        MBEAN_CONSTR_SIGAR = new MBeanConstructorInfo(
 | 
					        MBEAN_CONSTR_SIGAR = new MBeanConstructorInfo(
 | 
				
			||||||
                SigarLoadAverage.class.getName(),
 | 
					                SigarLoadAverage.class.getName(),
 | 
				
			||||||
                "Creates a new instance, using the Sigar instance specified "
 | 
					                "Creates a new instance, using the Sigar instance specified "
 | 
				
			||||||
                        + "to fetch the data. Fails if the CPU index is out of range.",
 | 
					                        + "to fetch the data. Fails if the CPU index is out of range.",
 | 
				
			||||||
                new MBeanParameterInfo[] { MBEAN_PARAM_SIGAR });
 | 
					                new MBeanParameterInfo[] { MBEAN_PARAM_SIGAR });
 | 
				
			||||||
        MBEAN_INFO = new MBeanInfo(
 | 
					        MBEAN_INFO = new MBeanInfo(
 | 
				
			||||||
                SigarLoadAverage.class.getName(),
 | 
					                SigarLoadAverage.class.getName(),
 | 
				
			||||||
                "Sigar load average MBean. Provides load averages of the "
 | 
					                "Sigar load average MBean. Provides load averages of the "
 | 
				
			||||||
                        + "system over the last one, five and 15 minutes. Due to the "
 | 
					                        + "system over the last one, five and 15 minutes. Due to the "
 | 
				
			||||||
                        + "long term character of that information, the fetch is done "
 | 
					                        + "long term character of that information, the fetch is done "
 | 
				
			||||||
                        + "using a Sigar proxy cache with a timeout of 30 seconds.",
 | 
					                        + "using a Sigar proxy cache with a timeout of 30 seconds.",
 | 
				
			||||||
                new MBeanAttributeInfo[] { MBEAN_ATTR_LAST1MIN,
 | 
					                new MBeanAttributeInfo[] { MBEAN_ATTR_LAST1MIN,
 | 
				
			||||||
                        MBEAN_ATTR_LAST5MIN, MBEAN_ATTR_LAST15MIN },
 | 
					                        MBEAN_ATTR_LAST5MIN, MBEAN_ATTR_LAST15MIN },
 | 
				
			||||||
                new MBeanConstructorInfo[] { MBEAN_CONSTR_SIGAR }, null, null);
 | 
					                new MBeanConstructorInfo[] { MBEAN_CONSTR_SIGAR }, null, null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Object name this instance will give itself when being registered to an
 | 
					     * Object name this instance will give itself when being registered to an
 | 
				
			||||||
     * MBeanServer.
 | 
					     * MBeanServer.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private final String objectName;
 | 
					    private final String objectName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * <p>Set <code>true</code> when the load average fetch failed with a 
 | 
					     * <p>Set <code>true</code> when the load average fetch failed with a 
 | 
				
			||||||
     * <code>SigarException</code> that indicates the method is not implemented.
 | 
					     * <code>SigarException</code> that indicates the method is not implemented.
 | 
				
			||||||
     * Any subsequent call to this instance will then be answered with 
 | 
					     * Any subsequent call to this instance will then be answered with 
 | 
				
			||||||
     * {@link #NOT_IMPLEMENTED_LOAD_VALUE}.
 | 
					     * {@link #NOT_IMPLEMENTED_LOAD_VALUE}.
 | 
				
			||||||
     * </p>
 | 
					     * </p>
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * <p><b>FIXME</b> : This is a workaround and should be replaced by something 
 | 
					     * <p><b>FIXME</b> : This is a workaround and should be replaced by something 
 | 
				
			||||||
     * more stable, as the code setting this member <code>true</code> relies on 
 | 
					     * more stable, as the code setting this member <code>true</code> relies on 
 | 
				
			||||||
     * a substring being present within the exception. A proposal was made at
 | 
					     * a substring being present within the exception. A proposal was made at
 | 
				
			||||||
     * <a href="http://jira.hyperic.com/browse/SIGAR-52">issue SIGAR-52</a>.
 | 
					     * <a href="http://jira.hyperic.com/browse/SIGAR-52">issue SIGAR-52</a>.
 | 
				
			||||||
     * </p>
 | 
					     * </p>
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private boolean notImplemented;
 | 
					    private boolean notImplemented;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Creates a new instance, using a new Sigar instance to fetch the data.
 | 
					     * Creates a new instance, using a new Sigar instance to fetch the data.
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * @throws IllegalArgumentException
 | 
					     * @throws IllegalArgumentException
 | 
				
			||||||
     *      If an unexpected Sigar error occurs.
 | 
					     *      If an unexpected Sigar error occurs.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public SigarLoadAverage() throws IllegalArgumentException {
 | 
					    public SigarLoadAverage() throws IllegalArgumentException {
 | 
				
			||||||
        this(new Sigar());
 | 
					        this(new Sigar());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Creates a new instance, using the Sigar instance specified to fetch the 
 | 
					     * Creates a new instance, using the Sigar instance specified to fetch the 
 | 
				
			||||||
     * data.
 | 
					     * data.
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * @param sigar
 | 
					     * @param sigar
 | 
				
			||||||
     *            The Sigar instance to use to fetch data from
 | 
					     *            The Sigar instance to use to fetch data from
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * @throws IllegalArgumentException
 | 
					     * @throws IllegalArgumentException
 | 
				
			||||||
     *             If an unexpected Sigar error occurs
 | 
					     *             If an unexpected Sigar error occurs
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public SigarLoadAverage(Sigar sigar) throws IllegalArgumentException {
 | 
					    public SigarLoadAverage(Sigar sigar) throws IllegalArgumentException {
 | 
				
			||||||
        super(sigar, CACHED_30SEC);
 | 
					        super(sigar, CACHED_30SEC);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // all fine
 | 
					        // all fine
 | 
				
			||||||
        this.objectName = SigarInvokerJMX.DOMAIN_NAME + ":" + MBEAN_ATTR_TYPE
 | 
					        this.objectName = SigarInvokerJMX.DOMAIN_NAME + ":" + MBEAN_ATTR_TYPE
 | 
				
			||||||
                + "=" + MBEAN_TYPE;
 | 
					                + "=" + MBEAN_TYPE;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Object name this instance will give itself when being registered to an
 | 
					     * Object name this instance will give itself when being registered to an
 | 
				
			||||||
     * MBeanServer.
 | 
					     * MBeanServer.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public String getObjectName() {
 | 
					    public String getObjectName() {
 | 
				
			||||||
        return this.objectName;
 | 
					        return this.objectName;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @return The load average in the last minute, as a fraction of 1, or 
 | 
					     * @return The load average in the last minute, as a fraction of 1, or 
 | 
				
			||||||
     *      <code>-1.0d</code> if the load cannot be determined on this platform
 | 
					     *      <code>-1.0d</code> if the load cannot be determined on this platform
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public double getLastMinute() {
 | 
					    public double getLastMinute() {
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            return sigarImpl.getLoadAverage()[0];
 | 
					            return sigarImpl.getLoadAverage()[0];
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
        } catch (SigarNotImplementedException e) {
 | 
					        } catch (SigarNotImplementedException e) {
 | 
				
			||||||
            return NOT_IMPLEMENTED_LOAD_VALUE;
 | 
					            return NOT_IMPLEMENTED_LOAD_VALUE;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
        } catch (SigarException e) {
 | 
					        } catch (SigarException e) {
 | 
				
			||||||
            throw unexpectedError(MBEAN_TYPE, e);
 | 
					            throw unexpectedError(MBEAN_TYPE, e);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @return The load average over the last five minutes, as a fraction of 1, 
 | 
					     * @return The load average over the last five minutes, as a fraction of 1, 
 | 
				
			||||||
     *      or <code>-1.0d</code> if the load cannot be determined on this 
 | 
					     *      or <code>-1.0d</code> if the load cannot be determined on this 
 | 
				
			||||||
     *      platform
 | 
					     *      platform
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public double getLastFiveMinutes() {
 | 
					    public double getLastFiveMinutes() {
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            return sigarImpl.getLoadAverage()[1];
 | 
					            return sigarImpl.getLoadAverage()[1];
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
        } catch (SigarNotImplementedException e) {
 | 
					        } catch (SigarNotImplementedException e) {
 | 
				
			||||||
            return NOT_IMPLEMENTED_LOAD_VALUE;
 | 
					            return NOT_IMPLEMENTED_LOAD_VALUE;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
        } catch (SigarException e) {
 | 
					        } catch (SigarException e) {
 | 
				
			||||||
            throw unexpectedError(MBEAN_TYPE, e);
 | 
					            throw unexpectedError(MBEAN_TYPE, e);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @return The load average over the last 15 minutes, as a fraction of 1, or 
 | 
					     * @return The load average over the last 15 minutes, as a fraction of 1, or 
 | 
				
			||||||
     *      <code>-1.0d</code> if the load cannot be determined on this platform
 | 
					     *      <code>-1.0d</code> if the load cannot be determined on this platform
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public double getLast15Minutes() {
 | 
					    public double getLast15Minutes() {
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            return sigarImpl.getLoadAverage()[2];
 | 
					            return sigarImpl.getLoadAverage()[2];
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
        } catch (SigarNotImplementedException e) {
 | 
					        } catch (SigarNotImplementedException e) {
 | 
				
			||||||
            return NOT_IMPLEMENTED_LOAD_VALUE;
 | 
					            return NOT_IMPLEMENTED_LOAD_VALUE;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
        } catch (SigarException e) {
 | 
					        } catch (SigarException e) {
 | 
				
			||||||
            throw unexpectedError(MBEAN_TYPE, e);
 | 
					            throw unexpectedError(MBEAN_TYPE, e);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // -------
 | 
					    // -------
 | 
				
			||||||
    // Implementation of the DynamicMBean interface
 | 
					    // Implementation of the DynamicMBean interface
 | 
				
			||||||
    // -------
 | 
					    // -------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
     * (non-Javadoc)
 | 
					     * (non-Javadoc)
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * @see DynamicMBean#getAttribute(String)
 | 
					     * @see DynamicMBean#getAttribute(String)
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public Object getAttribute(String attr) throws AttributeNotFoundException {
 | 
					    public Object getAttribute(String attr) throws AttributeNotFoundException {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (MBEAN_ATTR_LAST1MIN.getName().equals(attr)) {
 | 
					        if (MBEAN_ATTR_LAST1MIN.getName().equals(attr)) {
 | 
				
			||||||
            return new Double(getLastMinute());
 | 
					            return new Double(getLastMinute());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        } else if (MBEAN_ATTR_LAST5MIN.getName().equals(attr)) {
 | 
					        } else if (MBEAN_ATTR_LAST5MIN.getName().equals(attr)) {
 | 
				
			||||||
            return new Double(getLastFiveMinutes());
 | 
					            return new Double(getLastFiveMinutes());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        } else if (MBEAN_ATTR_LAST15MIN.getName().equals(attr)) {
 | 
					        } else if (MBEAN_ATTR_LAST15MIN.getName().equals(attr)) {
 | 
				
			||||||
            return new Double(getLast15Minutes());
 | 
					            return new Double(getLast15Minutes());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            throw new AttributeNotFoundException(attr);
 | 
					            throw new AttributeNotFoundException(attr);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
     * (non-Javadoc)
 | 
					     * (non-Javadoc)
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * @see DynamicMBean#setAttribute(Attribute)
 | 
					     * @see DynamicMBean#setAttribute(Attribute)
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public void setAttribute(Attribute attr) throws AttributeNotFoundException {
 | 
					    public void setAttribute(Attribute attr) throws AttributeNotFoundException {
 | 
				
			||||||
        throw new AttributeNotFoundException(attr.getName());
 | 
					        throw new AttributeNotFoundException(attr.getName());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
     * (non-Javadoc)
 | 
					     * (non-Javadoc)
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * @see DynamicMBean#invoke(String, Object[], String[])
 | 
					     * @see DynamicMBean#invoke(String, Object[], String[])
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public Object invoke(String actionName, Object[] params, String[] signature)
 | 
					    public Object invoke(String actionName, Object[] params, String[] signature)
 | 
				
			||||||
            throws ReflectionException {
 | 
					            throws ReflectionException {
 | 
				
			||||||
        throw new ReflectionException(new NoSuchMethodException(actionName),
 | 
					        throw new ReflectionException(new NoSuchMethodException(actionName),
 | 
				
			||||||
                actionName);
 | 
					                actionName);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
     * (non-Javadoc)
 | 
					     * (non-Javadoc)
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * @see DynamicMBean#getMBeanInfo()
 | 
					     * @see DynamicMBean#getMBeanInfo()
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public MBeanInfo getMBeanInfo() {
 | 
					    public MBeanInfo getMBeanInfo() {
 | 
				
			||||||
        return MBEAN_INFO;
 | 
					        return MBEAN_INFO;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,342 +1,342 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright (C) [2004, 2005, 2006, 2007], Hyperic, Inc.
 | 
					 * Copyright (C) [2004, 2005, 2006, 2007], Hyperic, Inc.
 | 
				
			||||||
 * This file is part of SIGAR.
 | 
					 * This file is part of SIGAR.
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * SIGAR is free software; you can redistribute it and/or modify
 | 
					 * SIGAR is free software; you can redistribute it and/or modify
 | 
				
			||||||
 * it under the terms version 2 of the GNU General Public License as
 | 
					 * it under the terms version 2 of the GNU General Public License as
 | 
				
			||||||
 * published by the Free Software Foundation. This program is distributed
 | 
					 * published by the Free Software Foundation. This program is distributed
 | 
				
			||||||
 * in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 | 
					 * in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 | 
				
			||||||
 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 | 
					 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 | 
				
			||||||
 * PARTICULAR PURPOSE. See the GNU General Public License for more
 | 
					 * PARTICULAR PURPOSE. See the GNU General Public License for more
 | 
				
			||||||
 * details.
 | 
					 * details.
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * You should have received a copy of the GNU General Public License
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 * along with this program; if not, write to the Free Software
 | 
					 * along with this program; if not, write to the Free Software
 | 
				
			||||||
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 | 
					 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 | 
				
			||||||
 * USA.
 | 
					 * USA.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package org.hyperic.sigar.jmx;
 | 
					package org.hyperic.sigar.jmx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import javax.management.Attribute;
 | 
					import javax.management.Attribute;
 | 
				
			||||||
import javax.management.AttributeNotFoundException;
 | 
					import javax.management.AttributeNotFoundException;
 | 
				
			||||||
import javax.management.MBeanConstructorInfo;
 | 
					import javax.management.MBeanConstructorInfo;
 | 
				
			||||||
import javax.management.MBeanException;
 | 
					import javax.management.MBeanException;
 | 
				
			||||||
import javax.management.MBeanInfo;
 | 
					import javax.management.MBeanInfo;
 | 
				
			||||||
import javax.management.MBeanParameterInfo;
 | 
					import javax.management.MBeanParameterInfo;
 | 
				
			||||||
import javax.management.MBeanServer;
 | 
					import javax.management.MBeanServer;
 | 
				
			||||||
import javax.management.ObjectInstance;
 | 
					import javax.management.ObjectInstance;
 | 
				
			||||||
import javax.management.ObjectName;
 | 
					import javax.management.ObjectName;
 | 
				
			||||||
import javax.management.ReflectionException;
 | 
					import javax.management.ReflectionException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.hyperic.sigar.Sigar;
 | 
					import org.hyperic.sigar.Sigar;
 | 
				
			||||||
import org.hyperic.sigar.SigarException;
 | 
					import org.hyperic.sigar.SigarException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * <p>Registry of all Sigar MBeans. Can be used as a convenient way to invoke 
 | 
					 * <p>Registry of all Sigar MBeans. Can be used as a convenient way to invoke 
 | 
				
			||||||
 * Sigar MBeans at a central point. This brings a bunch of advantages with 
 | 
					 * Sigar MBeans at a central point. This brings a bunch of advantages with 
 | 
				
			||||||
 * it:</p>
 | 
					 * it:</p>
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * <ul>
 | 
					 * <ul>
 | 
				
			||||||
 * <li>This class can be instantiated and registered to the MBean server by 
 | 
					 * <li>This class can be instantiated and registered to the MBean server by 
 | 
				
			||||||
 *     simply calling {@link MBeanServer#createMBean(String, ObjectName)}, 
 | 
					 *     simply calling {@link MBeanServer#createMBean(String, ObjectName)}, 
 | 
				
			||||||
 *  resulting in the automatic creation of all known default Sigar MBeans such 
 | 
					 *  resulting in the automatic creation of all known default Sigar MBeans such 
 | 
				
			||||||
 *  as CPU and memory monitoring beans.</li>
 | 
					 *  as CPU and memory monitoring beans.</li>
 | 
				
			||||||
 * <li>Any Sigar MBean spawned by an instance of this class will use the same
 | 
					 * <li>Any Sigar MBean spawned by an instance of this class will use the same
 | 
				
			||||||
 *     {@link org.hyperic.sigar.Sigar} instance, saving resources in the 
 | 
					 *     {@link org.hyperic.sigar.Sigar} instance, saving resources in the 
 | 
				
			||||||
 *  process.</li>
 | 
					 *  process.</li>
 | 
				
			||||||
 * <li>When this instance is deregistered from the MBean server, it will 
 | 
					 * <li>When this instance is deregistered from the MBean server, it will 
 | 
				
			||||||
 *     automatically deregister all instances it created, cleaning up behind 
 | 
					 *     automatically deregister all instances it created, cleaning up behind 
 | 
				
			||||||
 *  itself.</li>
 | 
					 *  itself.</li>
 | 
				
			||||||
 * </ul>
 | 
					 * </ul>
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * <p>So using this class to manage the Sigar MBeans requires one line of code 
 | 
					 * <p>So using this class to manage the Sigar MBeans requires one line of code 
 | 
				
			||||||
 * for creation, registration and MBean spawning, and one line of code to shut 
 | 
					 * for creation, registration and MBean spawning, and one line of code to shut 
 | 
				
			||||||
 * it all down again.</p>
 | 
					 * it all down again.</p>
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 * @author Bjoern Martin
 | 
					 * @author Bjoern Martin
 | 
				
			||||||
 * @since 1.5
 | 
					 * @since 1.5
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public class SigarRegistry extends AbstractMBean {
 | 
					public class SigarRegistry extends AbstractMBean {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final String MBEAN_TYPE = "SigarRegistry";
 | 
					    private static final String MBEAN_TYPE = "SigarRegistry";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final MBeanInfo MBEAN_INFO;
 | 
					    private static final MBeanInfo MBEAN_INFO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final MBeanConstructorInfo MBEAN_CONSTR_DEFAULT;
 | 
					    private static final MBeanConstructorInfo MBEAN_CONSTR_DEFAULT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//    private static final MBeanOperationInfo MBEAN_OPER_LISTPROCESSES;
 | 
					//    private static final MBeanOperationInfo MBEAN_OPER_LISTPROCESSES;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static {
 | 
					    static {
 | 
				
			||||||
        MBEAN_CONSTR_DEFAULT = new MBeanConstructorInfo(
 | 
					        MBEAN_CONSTR_DEFAULT = new MBeanConstructorInfo(
 | 
				
			||||||
                SigarRegistry.class.getName(),
 | 
					                SigarRegistry.class.getName(),
 | 
				
			||||||
                "Creates a new instance of this class. Will create the Sigar "
 | 
					                "Creates a new instance of this class. Will create the Sigar "
 | 
				
			||||||
                        + "instance this class uses when constructing other MBeans",
 | 
					                        + "instance this class uses when constructing other MBeans",
 | 
				
			||||||
                new MBeanParameterInfo[0]);
 | 
					                new MBeanParameterInfo[0]);
 | 
				
			||||||
//        MBEAN_OPER_LISTPROCESSES = new MBeanOperationInfo("listProcesses",
 | 
					//        MBEAN_OPER_LISTPROCESSES = new MBeanOperationInfo("listProcesses",
 | 
				
			||||||
//                "Executes a query returning the process IDs of all processes " +
 | 
					//                "Executes a query returning the process IDs of all processes " +
 | 
				
			||||||
//                "found on the system.",
 | 
					//                "found on the system.",
 | 
				
			||||||
//                null /* new MBeanParameterInfo[0] */,
 | 
					//                null /* new MBeanParameterInfo[0] */,
 | 
				
			||||||
//                String.class.getName(), MBeanOperationInfo.INFO);
 | 
					//                String.class.getName(), MBeanOperationInfo.INFO);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        MBEAN_INFO = new MBeanInfo(
 | 
					        MBEAN_INFO = new MBeanInfo(
 | 
				
			||||||
                SigarRegistry.class.getName(),
 | 
					                SigarRegistry.class.getName(),
 | 
				
			||||||
                "Sigar MBean registry. Provides a central point for creation "
 | 
					                "Sigar MBean registry. Provides a central point for creation "
 | 
				
			||||||
                        + "and destruction of Sigar MBeans. Any Sigar MBean created via "
 | 
					                        + "and destruction of Sigar MBeans. Any Sigar MBean created via "
 | 
				
			||||||
                        + "this instance will automatically be cleaned up when this "
 | 
					                        + "this instance will automatically be cleaned up when this "
 | 
				
			||||||
                        + "instance is deregistered from the MBean server.",
 | 
					                        + "instance is deregistered from the MBean server.",
 | 
				
			||||||
                null /*new MBeanAttributeInfo[0]*/,
 | 
					                null /*new MBeanAttributeInfo[0]*/,
 | 
				
			||||||
                new MBeanConstructorInfo[] { MBEAN_CONSTR_DEFAULT },
 | 
					                new MBeanConstructorInfo[] { MBEAN_CONSTR_DEFAULT },
 | 
				
			||||||
                null /*new MBeanOperationInfo[0] */, 
 | 
					                null /*new MBeanOperationInfo[0] */, 
 | 
				
			||||||
                null /*new MBeanNotificationInfo[0]*/);
 | 
					                null /*new MBeanNotificationInfo[0]*/);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private final String objectName;
 | 
					    private final String objectName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private final ArrayList managedBeans;
 | 
					    private final ArrayList managedBeans;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Creates a new instance of this class. Will create the Sigar instance this 
 | 
					     * Creates a new instance of this class. Will create the Sigar instance this 
 | 
				
			||||||
     * class uses when constructing other MBeans.
 | 
					     * class uses when constructing other MBeans.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public SigarRegistry() {
 | 
					    public SigarRegistry() {
 | 
				
			||||||
        super(new Sigar(), CACHELESS);
 | 
					        super(new Sigar(), CACHELESS);
 | 
				
			||||||
        this.objectName = SigarInvokerJMX.DOMAIN_NAME + ":" + MBEAN_ATTR_TYPE
 | 
					        this.objectName = SigarInvokerJMX.DOMAIN_NAME + ":" + MBEAN_ATTR_TYPE
 | 
				
			||||||
                + "=" + MBEAN_TYPE;
 | 
					                + "=" + MBEAN_TYPE;
 | 
				
			||||||
        this.managedBeans = new ArrayList();
 | 
					        this.managedBeans = new ArrayList();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* (non-Javadoc)
 | 
					    /* (non-Javadoc)
 | 
				
			||||||
     * @see AbstractMBean#getObjectName()
 | 
					     * @see AbstractMBean#getObjectName()
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public String getObjectName() {
 | 
					    public String getObjectName() {
 | 
				
			||||||
        return this.objectName;
 | 
					        return this.objectName;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*  public String listProcesses() {
 | 
					/*  public String listProcesses() {
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            final long start = System.currentTimeMillis();
 | 
					            final long start = System.currentTimeMillis();
 | 
				
			||||||
            long[] ids = sigar.getProcList();
 | 
					            long[] ids = sigar.getProcList();
 | 
				
			||||||
            StringBuffer procNames = new StringBuffer();
 | 
					            StringBuffer procNames = new StringBuffer();
 | 
				
			||||||
            for (int i = 0; i < ids.length; i++) {
 | 
					            for (int i = 0; i < ids.length; i++) {
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    procNames.append(ids[i] + ":" + sigar.getProcExe(ids[i]).getName()).append('\n');
 | 
					                    procNames.append(ids[i] + ":" + sigar.getProcExe(ids[i]).getName()).append('\n');
 | 
				
			||||||
                } catch (SigarException e) {
 | 
					                } catch (SigarException e) {
 | 
				
			||||||
                    procNames.append(ids[i] + ":" + e.getMessage()).append('\n');
 | 
					                    procNames.append(ids[i] + ":" + e.getMessage()).append('\n');
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            final long end = System.currentTimeMillis();
 | 
					            final long end = System.currentTimeMillis();
 | 
				
			||||||
            procNames.append("-- Took " + (end-start) + "ms");
 | 
					            procNames.append("-- Took " + (end-start) + "ms");
 | 
				
			||||||
            return procNames.toString();
 | 
					            return procNames.toString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        } catch (SigarException e) {
 | 
					        } catch (SigarException e) {
 | 
				
			||||||
            throw unexpectedError("ProcList", e);
 | 
					            throw unexpectedError("ProcList", e);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
    /* (non-Javadoc)
 | 
					    /* (non-Javadoc)
 | 
				
			||||||
     * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
 | 
					     * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public Object getAttribute(String attr) throws AttributeNotFoundException {
 | 
					    public Object getAttribute(String attr) throws AttributeNotFoundException {
 | 
				
			||||||
        throw new AttributeNotFoundException(attr);
 | 
					        throw new AttributeNotFoundException(attr);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* (non-Javadoc)
 | 
					    /* (non-Javadoc)
 | 
				
			||||||
     * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
 | 
					     * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public void setAttribute(Attribute attr) throws AttributeNotFoundException {
 | 
					    public void setAttribute(Attribute attr) throws AttributeNotFoundException {
 | 
				
			||||||
        throw new AttributeNotFoundException(attr.getName());
 | 
					        throw new AttributeNotFoundException(attr.getName());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* (non-Javadoc)
 | 
					    /* (non-Javadoc)
 | 
				
			||||||
     * @see javax.management.DynamicMBean#invoke(java.lang.String, java.lang.Object[], java.lang.String[])
 | 
					     * @see javax.management.DynamicMBean#invoke(java.lang.String, java.lang.Object[], java.lang.String[])
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public Object invoke(String action, Object[] params, String[] signatures)
 | 
					    public Object invoke(String action, Object[] params, String[] signatures)
 | 
				
			||||||
            throws MBeanException, ReflectionException {
 | 
					            throws MBeanException, ReflectionException {
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
/*      if (MBEAN_OPER_LISTPROCESSES.getName().equals(action))
 | 
					/*      if (MBEAN_OPER_LISTPROCESSES.getName().equals(action))
 | 
				
			||||||
            return listProcesses();
 | 
					            return listProcesses();
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        else */
 | 
					        else */
 | 
				
			||||||
            throw new ReflectionException(new NoSuchMethodException(action), action);
 | 
					            throw new ReflectionException(new NoSuchMethodException(action), action);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* (non-Javadoc)
 | 
					    /* (non-Javadoc)
 | 
				
			||||||
     * @see javax.management.DynamicMBean#getMBeanInfo()
 | 
					     * @see javax.management.DynamicMBean#getMBeanInfo()
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public MBeanInfo getMBeanInfo() {
 | 
					    public MBeanInfo getMBeanInfo() {
 | 
				
			||||||
        return MBEAN_INFO;
 | 
					        return MBEAN_INFO;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // -------
 | 
					    // -------
 | 
				
			||||||
    // Implementation of the MBeanRegistration interface
 | 
					    // Implementation of the MBeanRegistration interface
 | 
				
			||||||
    // -------
 | 
					    // -------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Registers the default set of Sigar MBeans. Before doing so, a super call 
 | 
					     * Registers the default set of Sigar MBeans. Before doing so, a super call 
 | 
				
			||||||
     * is made to satisfy {@link AbstractMBean}.
 | 
					     * is made to satisfy {@link AbstractMBean}.
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * @see AbstractMBean#postRegister(Boolean)
 | 
					     * @see AbstractMBean#postRegister(Boolean)
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public void postRegister(Boolean success) {
 | 
					    public void postRegister(Boolean success) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        super.postRegister(success);
 | 
					        super.postRegister(success);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!success.booleanValue())
 | 
					        if (!success.booleanValue())
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // get CPUs
 | 
					        // get CPUs
 | 
				
			||||||
        registerCpuBeans();
 | 
					        registerCpuBeans();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // get memory
 | 
					        // get memory
 | 
				
			||||||
        registerMemoryBeans();
 | 
					        registerMemoryBeans();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // get system
 | 
					        // get system
 | 
				
			||||||
        registerSystemBeans();
 | 
					        registerSystemBeans();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Registers MBeans for the Sigar types <code>Cpu</code>, <code>CpuPerc</code>
 | 
					     * Registers MBeans for the Sigar types <code>Cpu</code>, <code>CpuPerc</code>
 | 
				
			||||||
     *  and <code>CpuInfo</code>. One instance will be registered for each CPU 
 | 
					     *  and <code>CpuInfo</code>. One instance will be registered for each CPU 
 | 
				
			||||||
     *  (core?) found.
 | 
					     *  (core?) found.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private void registerCpuBeans() {
 | 
					    private void registerCpuBeans() {
 | 
				
			||||||
        ObjectInstance nextRegistered = null;
 | 
					        ObjectInstance nextRegistered = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            final int cpuCount = sigar.getCpuInfoList().length;
 | 
					            final int cpuCount = sigar.getCpuInfoList().length;
 | 
				
			||||||
            for (int i = 0; i < cpuCount; i++) {
 | 
					            for (int i = 0; i < cpuCount; i++) {
 | 
				
			||||||
                // add CPU bean
 | 
					                // add CPU bean
 | 
				
			||||||
                SigarCpu nextCpu = new SigarCpu(sigarImpl, i);
 | 
					                SigarCpu nextCpu = new SigarCpu(sigarImpl, i);
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    if (!mbeanServer.isRegistered(new ObjectName(nextCpu
 | 
					                    if (!mbeanServer.isRegistered(new ObjectName(nextCpu
 | 
				
			||||||
                            .getObjectName())))
 | 
					                            .getObjectName())))
 | 
				
			||||||
                        nextRegistered = mbeanServer.registerMBean(nextCpu,
 | 
					                        nextRegistered = mbeanServer.registerMBean(nextCpu,
 | 
				
			||||||
                                null);
 | 
					                                null);
 | 
				
			||||||
                } catch (Exception e) { // ignore
 | 
					                } catch (Exception e) { // ignore
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                // add MBean to set of managed beans
 | 
					                // add MBean to set of managed beans
 | 
				
			||||||
                if (nextRegistered != null)
 | 
					                if (nextRegistered != null)
 | 
				
			||||||
                    managedBeans.add(nextRegistered.getObjectName());
 | 
					                    managedBeans.add(nextRegistered.getObjectName());
 | 
				
			||||||
                nextRegistered = null;
 | 
					                nextRegistered = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // add CPU percentage bean
 | 
					                // add CPU percentage bean
 | 
				
			||||||
                SigarCpuPerc nextCpuPerc = new SigarCpuPerc(sigarImpl, i);
 | 
					                SigarCpuPerc nextCpuPerc = new SigarCpuPerc(sigarImpl, i);
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    if (!mbeanServer.isRegistered(new ObjectName(nextCpuPerc
 | 
					                    if (!mbeanServer.isRegistered(new ObjectName(nextCpuPerc
 | 
				
			||||||
                            .getObjectName())))
 | 
					                            .getObjectName())))
 | 
				
			||||||
                        nextRegistered = mbeanServer.registerMBean(nextCpuPerc,
 | 
					                        nextRegistered = mbeanServer.registerMBean(nextCpuPerc,
 | 
				
			||||||
                                null);
 | 
					                                null);
 | 
				
			||||||
                } catch (Exception e) { // ignore
 | 
					                } catch (Exception e) { // ignore
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                // add MBean to set of managed beans
 | 
					                // add MBean to set of managed beans
 | 
				
			||||||
                if (nextRegistered != null)
 | 
					                if (nextRegistered != null)
 | 
				
			||||||
                    managedBeans.add(nextRegistered.getObjectName());
 | 
					                    managedBeans.add(nextRegistered.getObjectName());
 | 
				
			||||||
                nextRegistered = null;
 | 
					                nextRegistered = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // add CPU info bean
 | 
					                // add CPU info bean
 | 
				
			||||||
                SigarCpuInfo nextCpuInfo = new SigarCpuInfo(sigarImpl, i);
 | 
					                SigarCpuInfo nextCpuInfo = new SigarCpuInfo(sigarImpl, i);
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    if (!mbeanServer.isRegistered(new ObjectName(nextCpuInfo
 | 
					                    if (!mbeanServer.isRegistered(new ObjectName(nextCpuInfo
 | 
				
			||||||
                            .getObjectName())))
 | 
					                            .getObjectName())))
 | 
				
			||||||
                        nextRegistered = mbeanServer.registerMBean(nextCpuInfo,
 | 
					                        nextRegistered = mbeanServer.registerMBean(nextCpuInfo,
 | 
				
			||||||
                                null);
 | 
					                                null);
 | 
				
			||||||
                } catch (Exception e) { // ignore
 | 
					                } catch (Exception e) { // ignore
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                // add MBean to set of managed beans
 | 
					                // add MBean to set of managed beans
 | 
				
			||||||
                if (nextRegistered != null)
 | 
					                if (nextRegistered != null)
 | 
				
			||||||
                    managedBeans.add(nextRegistered.getObjectName());
 | 
					                    managedBeans.add(nextRegistered.getObjectName());
 | 
				
			||||||
                nextRegistered = null;
 | 
					                nextRegistered = null;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        } catch (SigarException e) {
 | 
					        } catch (SigarException e) {
 | 
				
			||||||
            throw unexpectedError("CpuInfoList", e);
 | 
					            throw unexpectedError("CpuInfoList", e);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Registers MBeans for the Sigar types <code>Mem</code> and <code>Swap</code>. 
 | 
					     * Registers MBeans for the Sigar types <code>Mem</code> and <code>Swap</code>. 
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private void registerMemoryBeans() {
 | 
					    private void registerMemoryBeans() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ObjectInstance nextRegistered = null;
 | 
					        ObjectInstance nextRegistered = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // add physical memory bean
 | 
					        // add physical memory bean
 | 
				
			||||||
        SigarMem mem = new SigarMem(sigarImpl);
 | 
					        SigarMem mem = new SigarMem(sigarImpl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            if (!mbeanServer.isRegistered(new ObjectName(mem.getObjectName())))
 | 
					            if (!mbeanServer.isRegistered(new ObjectName(mem.getObjectName())))
 | 
				
			||||||
                nextRegistered = mbeanServer.registerMBean(mem, null);
 | 
					                nextRegistered = mbeanServer.registerMBean(mem, null);
 | 
				
			||||||
        } catch (Exception e) { // ignore
 | 
					        } catch (Exception e) { // ignore
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // add MBean to set of managed beans
 | 
					        // add MBean to set of managed beans
 | 
				
			||||||
        if (nextRegistered != null)
 | 
					        if (nextRegistered != null)
 | 
				
			||||||
            managedBeans.add(nextRegistered.getObjectName());
 | 
					            managedBeans.add(nextRegistered.getObjectName());
 | 
				
			||||||
        nextRegistered = null;
 | 
					        nextRegistered = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // add swap memory bean
 | 
					        // add swap memory bean
 | 
				
			||||||
        SigarSwap swap = new SigarSwap(sigarImpl);
 | 
					        SigarSwap swap = new SigarSwap(sigarImpl);
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            if (!mbeanServer.isRegistered(new ObjectName(swap.getObjectName())))
 | 
					            if (!mbeanServer.isRegistered(new ObjectName(swap.getObjectName())))
 | 
				
			||||||
                nextRegistered = mbeanServer.registerMBean(swap, null);
 | 
					                nextRegistered = mbeanServer.registerMBean(swap, null);
 | 
				
			||||||
        } catch (Exception e) { // ignore
 | 
					        } catch (Exception e) { // ignore
 | 
				
			||||||
            nextRegistered = null;
 | 
					            nextRegistered = null;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // add MBean to set of managed beans
 | 
					        // add MBean to set of managed beans
 | 
				
			||||||
        if (nextRegistered != null)
 | 
					        if (nextRegistered != null)
 | 
				
			||||||
            managedBeans.add(nextRegistered.getObjectName());
 | 
					            managedBeans.add(nextRegistered.getObjectName());
 | 
				
			||||||
        nextRegistered = null;
 | 
					        nextRegistered = null;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Registers MBeans for the Sigar types <code>LoadAverage</code>... 
 | 
					     * Registers MBeans for the Sigar types <code>LoadAverage</code>... 
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private void registerSystemBeans() {
 | 
					    private void registerSystemBeans() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ObjectInstance nextRegistered = null;
 | 
					        ObjectInstance nextRegistered = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // add load average bean
 | 
					        // add load average bean
 | 
				
			||||||
        SigarLoadAverage loadAvg = new SigarLoadAverage(sigarImpl);
 | 
					        SigarLoadAverage loadAvg = new SigarLoadAverage(sigarImpl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            if (!mbeanServer.isRegistered(new ObjectName(loadAvg
 | 
					            if (!mbeanServer.isRegistered(new ObjectName(loadAvg
 | 
				
			||||||
                    .getObjectName())))
 | 
					                    .getObjectName())))
 | 
				
			||||||
                nextRegistered = mbeanServer.registerMBean(loadAvg, null);
 | 
					                nextRegistered = mbeanServer.registerMBean(loadAvg, null);
 | 
				
			||||||
        } catch (Exception e) { // ignore
 | 
					        } catch (Exception e) { // ignore
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // add MBean to set of managed beans
 | 
					        // add MBean to set of managed beans
 | 
				
			||||||
        if (nextRegistered != null)
 | 
					        if (nextRegistered != null)
 | 
				
			||||||
            managedBeans.add(nextRegistered.getObjectName());
 | 
					            managedBeans.add(nextRegistered.getObjectName());
 | 
				
			||||||
        nextRegistered = null;
 | 
					        nextRegistered = null;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Deregisters all Sigar MBeans that were created and registered using this 
 | 
					     * Deregisters all Sigar MBeans that were created and registered using this 
 | 
				
			||||||
     * instance. After doing so, a super call is made to satisfy {@link AbstractMBean}.
 | 
					     * instance. After doing so, a super call is made to satisfy {@link AbstractMBean}.
 | 
				
			||||||
     * @throws Exception 
 | 
					     * @throws Exception 
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * @see AbstractMBean#preDeregister()
 | 
					     * @see AbstractMBean#preDeregister()
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public void preDeregister() throws Exception {
 | 
					    public void preDeregister() throws Exception {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // count backwards to remove ONs immediately
 | 
					        // count backwards to remove ONs immediately
 | 
				
			||||||
        for (int i = managedBeans.size() - 1; i >= 0; i--) {
 | 
					        for (int i = managedBeans.size() - 1; i >= 0; i--) {
 | 
				
			||||||
            ObjectName next = (ObjectName) managedBeans.remove(i);
 | 
					            ObjectName next = (ObjectName) managedBeans.remove(i);
 | 
				
			||||||
            if (mbeanServer.isRegistered(next)) {
 | 
					            if (mbeanServer.isRegistered(next)) {
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    mbeanServer.unregisterMBean(next);
 | 
					                    mbeanServer.unregisterMBean(next);
 | 
				
			||||||
                } catch (Exception e) { // ignore
 | 
					                } catch (Exception e) { // ignore
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // do the super call
 | 
					        // do the super call
 | 
				
			||||||
        super.preDeregister();
 | 
					        super.preDeregister();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user