package org.infosec.ismp.collectd.snmp.tracker; import java.net.InetAddress; import java.util.Map; import org.infosec.ismp.collectd.snmp.config.SnmpConfigFactory; import org.infosec.ismp.collectd.snmp.configuration.Device; import org.infosec.ismp.collectd.snmp.configuration.Table; import org.infosec.ismp.snmp.AggregateTracker; /** * @author guoxianwei * @date 2010-11-3 下午02:22:24 * */ public final class SnmpCollectionDispatcher { public static Map<String, Object> g_map = null; private InetAddress m_address; // static Result result = new Result(); public SnmpCollectionDispatcher() { } public SnmpCollectionDispatcher(InetAddress address) { m_address = address; } public AggregateTracker[] getAggregateTrackers(String type,String brand) { Device device = SnmpConfigFactory.getInstance().getDevice(type,brand); if(device==null){ throw new RuntimeException("目前不支持该类型 : "+type); } if(device.getParent()!=null && !"".equals(device.getParent())){ Device parentDevice = SnmpConfigFactory.getInstance().getDevice(device.getParent(),null); device.addTables(parentDevice.getTables()); } Iterable<Table> tables = device.getTableCollection(); AggregateTracker[] trackers = null; trackers = new AggregateTracker[device.getTableCount()]; int idx = 0; if(tables!=null){ for (Table table : tables) { AggregateTracker tracker = newSnmpTrackerInstance(m_address, table); trackers[idx] = tracker; idx++; } } return trackers; } public static AggregateTracker newSnmpTrackerInstance(InetAddress address,Table table){ if(table.isTable()){ return new SnmpTableTracker(address,table); }else{ return new GenericColumnTracker(address,table); } } public static void main(String[] args) throws Exception{/* SnmpConfigFactory.init("d:/File"); SnmpAgentConfig agentConfig = new SnmpAgentConfig( InetAddress.getLocalHost()); SnmpCollectionDispatcher dispatcher = new SnmpCollectionDispatcher(agentConfig.getAddress()); AggregateTracker[] tracker = dispatcher.getAggregateTrackers("cisco"); SnmpWalker walker = SnmpUtils.createWalker(agentConfig, "SnmpCollectors for test", tracker); walker.start(); walker.waitFor(60 * 1000 * 5); for(AggregateTracker tr : tracker){ if(tr instanceof SnmpTableTracker){ SnmpTableTracker t = (SnmpTableTracker)tr; Map<String,Map<String,Object>> map = t.getStoreResult(); Set<Entry<String,Map<String,Object>>> treeSet = map.entrySet(); for(Entry<String,Map<String,Object>> treeEntry : treeSet){ System.out.println("column-------------"+treeEntry.getKey()); Map<String,Object> treeMap = treeEntry.getValue(); for(Entry<String,Object> entry:treeMap.entrySet()){ System.out.println("key:"+entry.getKey()+" value:"+entry.getValue()); } } }else{ GenericColumnTracker t = (GenericColumnTracker)tr; System.out.println("column--------------------"+t.getTrackerName()); result.putAll(t.getStoreResult()); } } for(Object obj:result.values()){ System.out.println("value--------------------"+obj); } */} }