/*
* 'IfTableCollector.java' NOTE: This copyright does *not* cover user programs
* that use HQ program services by normal system calls through the application
* program interfaces provided as part of the Hyperic Plug-in Development Kit or
* the Hyperic Client Development Kit - this is merely considered normal use of
* the program, and does *not* fall under the heading of "derived work".
* Copyright (C) [2004, 2005, 2006, 2007, 2008, 2009], Hyperic, Inc. This file
* is part of HQ. HQ is free software; you can redistribute it and/or modify it
* under the terms version 2 of the GNU General Public License as published by
* the Free Software Foundation. This program is distributed in the hope that it
* will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details. You should have received a copy of the GNU
* General Public License along with this program; if not, write to the Free
* Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA.
*/
package org.hyperic.hq.plugin.netdevice;
import java.util.HashMap;
import java.util.List;
import org.hyperic.hq.product.PluginException;
import org.hyperic.snmp.SNMPClient;
import org.hyperic.snmp.SNMPException;
import org.hyperic.snmp.SNMPSession;
public class IfTableCollector
extends SNMPCollector
{
private boolean _isVersion1;
private String _columnName;
private static HashMap counter64 = new HashMap();
//
// Conditionally use Counter64 versions of IF-MIB metrics.
// These metrics are not supported when using SNMPv1.
// Not all devices support the 64 bit versions, regardless.
//
static {
counter64.put("ifInOctets", "ifHCInOctets");
counter64.put("ifOutOctets", "ifHCOutOctets");
counter64.put("ifInUcastPkts", "ifHCInUcastPkts");
counter64.put("ifOutUcastPkts", "ifHCOutUcastPkts");
counter64.put("ifInNUcastPkts", "ifInMulticastPkts");
counter64.put("ifOutNUcastPkts", "ifOutMulticastPkts");
}
protected String getColumnName() {
return _columnName;
}
protected void init(SNMPSession session) throws PluginException {
_isVersion1 = "v1".equals(_props.getProperty(SNMPClient.PROP_VERSION));
_columnName = super.getColumnName();
if (_columnName == null) {
throw new PluginException(PROP_COLUMN + " not defined: " + getProperties() + " (stale template?)");
}
if (_isVersion1) {
return;
}
String name = (String) counter64.get(_columnName);
if (name != null) {
List list64 = null;
try {
list64 = session.getBulk(name);
} catch (SNMPException e) {
}
if (isEmpty(list64, name)) {
getLog().debug(getInfo() + " does not support Counter64: " + name);
} else {
getLog().debug("Switching to 64 bit counter: " + _columnName + "->" + name + ": " + getInfo());
_columnName = name;
}
}
setSource(_columnName + "@" + getInfo());
}
protected boolean isTotalCounter(String name) {
return name.endsWith("Octets");
}
public void collect() {
collectIndexedColumn();
}
}