/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.jmx.adaptor.snmp.system;
import javax.management.ObjectName;
import org.jboss.jmx.adaptor.snmp.agent.SnmpAgentServiceMBean;
import org.jboss.system.ServiceMBeanSupport;
import org.jboss.system.server.ServerConfigLocator;
import org.jboss.system.server.ServerInfoMBean;
import org.opennms.protocols.snmp.SnmpObjectId;
import org.opennms.protocols.snmp.SnmpTimeTicks;
/**
* An MBean service that defines the MIB-2 system group an agent
* is supposed to implement under the oid
* iso.org.dod.internet.mgmt.mib-2.system (.1.3.6.1.2.1.1)
* See rfc-1213
*
* @author <a href="mailto:hwr@pilhuhn.de">Heiko W. Rupp</a>
* @author <a href="mailto:dimitris@jboss.org">Dimitris Andreadis</a>
* @version $Revision: 93935 $
*/
public class MIB2SystemGroupService extends ServiceMBeanSupport
implements MIB2SystemGroupServiceMBean
{
// Constants -----------------------------------------------------
/** JBoss OID Prefix */
public static final String JBOSS_PREFIX = "1.3.6.1.4.1.18016";
/** Product JBossAS */
public static final String PRODUCT = ".1.1";
/** Version 4.0.x */
public static final String VERSION = ".2";
// Private Data --------------------------------------------------
private String sysDescr; // system.1
private SnmpObjectId sysObjectId; // system.2
// private long sysUpTime; // system.3
private String sysContact; // system.4
private String sysName; // system.5 usually fqdn
private String sysLocation; // system.6 where is the system located
private final int sysServices = 64; // system.7 (2^(L-1) with L=Layer 7 services)
private ObjectName snmpAgent = SnmpAgentServiceMBean.OBJECT_NAME;
/**
* CTOR
*
*/
public MIB2SystemGroupService()
{
// empty
}
// Attributes ----------------------------------------------------
/**
* @jmx:managed-attribute
*/
public void setSnmpAgent(ObjectName agent)
{
this.snmpAgent = agent;
}
/**
* @jmx:managed-attribute
*/
public ObjectName getSnmpAgent()
{
return snmpAgent;
}
/**
* @jmx:managed-attribute
*/
public void setSysDescr(String sysDescr)
{
this.sysDescr = sysDescr;
}
/**
* @jmx:managed-attribute
*/
public String getSysDescr()
{
return sysDescr;
}
/**
* @jmx:managed-attribute
*/
public SnmpObjectId getSysObjectId()
{
return sysObjectId;
}
/**
* The system uptime in hundreth of a second (TimeTicks)
* @jmx:managed-attribute
*/
public SnmpTimeTicks getSysUpTime()
{
if (snmpAgent !=null)
{
try
{
Long upTime = (Long)server.getAttribute(snmpAgent, "Uptime");
return new SnmpTimeTicks(upTime.longValue() / 10);
}
catch (Exception e)
{
log.debug("Can't get uptime value from agent");
}
}
// fallback
return new SnmpTimeTicks(System.currentTimeMillis() / 10);
}
/**
* @jmx:managed-attribute
*/
public void setSysContact(String sysContact)
{
this.sysContact = sysContact;
}
/**
* @jmx:managed-attribute
*/
public String getSysContact()
{
return sysContact;
}
/**
* @jmx:managed-attribute
*/
public void setSysName(String sysName)
{
this.sysName = sysName;
}
/**
* @jmx:managed-attribute
*/
public String getSysName()
{
return sysName;
}
/**
* @jmx:managed-attribute
*/
public void setSysLocation(String sysLocation)
{
this.sysLocation = sysLocation;
}
/**
* @jmx:managed-attribute
*/
public String getSysLocation()
{
return sysLocation;
}
/**
* @jmx:managed-attribute
*/
public int getSysServices()
{
return sysServices;
}
// Lifecycle -----------------------------------------------------
protected void createService() throws Exception
{
// Determine the sysName from the running server config and the host name.
if (this.sysName == null)
{
String serverConfig = ServerConfigLocator.locate().getServerName();
ObjectName name = new ObjectName(ServerInfoMBean.OBJECT_NAME_STR);
String hostAddress = (String)server.getAttribute(name, "HostAddress");
this.sysName = serverConfig + "@" + hostAddress;
log.debug("Setting sysName name to " + sysName);
}
this.sysObjectId = new SnmpObjectId(JBOSS_PREFIX + PRODUCT + VERSION);
}
}