package org.infosec.ismp.collectd; import org.infosec.ismp.collectd.services.SnmpCollectableConfig; import org.infosec.ismp.collectd.services.SnmpCollectableService; import org.infosec.ismp.collectd.services.SnmpNetwork; import org.infosec.ismp.daemon.AbstractServiceDaemon; import org.infosec.ismp.snmp.SnmpAgentConfig; import org.infosec.ismp.util.ThreadCategory; import org.infosec.ismp.util.scheduler.LegacyScheduler; import org.infosec.ismp.util.scheduler.Schedule; import org.infosec.ismp.util.scheduler.Scheduler; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.Assert; @Component public class SnmpCollectd extends AbstractServiceDaemon { private Scheduler m_scheduler;// 调度器 private int m_threads = -1; private SnmpNetwork m_snmpNetwork; public static String LOG_CATEGORY = "Ismp.SnmpCollectd"; public SnmpCollectd() { super(LOG_CATEGORY); } @Override protected void onInit() { Assert.state(m_threads>0,"请检查threads是否设定"); Assert.notNull(m_snmpNetwork, "please set m_snmpNetwork,it must not be null"); createScheduler(); } //执行SNMP设备采集轮询操作 public void scheduleSnmpNode(SnmpAgentConfig agentConfig){ SnmpCollectableService svc = m_snmpNetwork.createSnmpCollectableService(agentConfig); SnmpCollectableConfig config = new SnmpCollectableConfig(svc); Schedule schedule = new Schedule(svc, config, getScheduler()); svc.setSchedule(schedule); svc.onInit(); svc.schedule(); } public void unscheduleSnmpService(String nodeid){ SnmpCollectableService svc = m_snmpNetwork.getSnmpCollectableService(nodeid); if(svc!=null){ svc.delete(); } } @Override protected void onStart() { try { if (log().isDebugEnabled()) log().debug("start: Starting snmp collectd scheduler"); getScheduler().start(); } catch (RuntimeException e) { if (log().isEnabledFor(ThreadCategory.Level.FATAL)) log().fatal("start: Failed to start scheduler", e); throw e; } try{ new BroadcastEventProcessor(this); }catch (Exception ex) { log().error("Failed to setup event reader", ex); } } @Override protected void onStop() { if (log().isDebugEnabled()) log().debug("stop: stoping snmp collectd scheduler"); if (getScheduler() != null) { getScheduler().stop(); } } private void createScheduler() { ThreadCategory log = log(); // Create a scheduler try { log.debug("init: Creating snmp collectd scheduler"); setScheduler(new LegacyScheduler("snmp collectd", m_threads)); } catch (RuntimeException e) { log.fatal("init: Failed to create poller scheduler", e); throw e; } } // ////////////////////////// public Scheduler getScheduler() { return m_scheduler; } public void setScheduler(Scheduler scheduler) { m_scheduler = scheduler; } @Autowired(required=true) public void setSnmpNetwork(SnmpNetwork snmpNetwork) { m_snmpNetwork = snmpNetwork; } public SnmpNetwork getSnmpNetwork() { return m_snmpNetwork; } public int getThreads() { return m_threads; } public void setThreads(int threads) { m_threads = threads; } }