public TableTracker(RowCallback rc, int maxRepetitions, int maxRetries, SnmpObjId... columns) { m_tableResult = new SnmpTableResult(rc == null ? this : rc, this, columns); m_columnTrackers = new ArrayList<ColumnTracker>(columns.length); for (SnmpObjId id : columns) { m_columnTrackers.add(new ColumnTracker(this, id, maxRepetitions, maxRetries)); } }
public boolean processErrors(int errorStatus, int errorIndex) { if (errorStatus == NO_ERR) { return false; } else if (errorStatus == TOO_BIG_ERR) { throw new IllegalArgumentException("Unable to handle tooBigError for next oid request after "+m_last); } else if (errorStatus == GEN_ERR) { reportGenErr("Received genErr reqeusting next oid after "+m_last+". Marking column is finished."); errorOccurred(); return true; } else if (errorStatus == NO_SUCH_NAME_ERR) { reportNoSuchNameErr("Received noSuchName reqeusting next oid after "+m_last+". Marking column is finished."); errorOccurred(); return true; } else { throw new IllegalArgumentException("Unexpected error processing next oid after "+m_last+". Aborting!"); } } };
@Override public int compare(ColumnTracker o1, ColumnTracker o2) { SnmpInstId lhs = o1.getLastInstance(); SnmpInstId rhs = o2.getLastInstance(); if (lhs == rhs) return 0; if (lhs == null) return -1; if (rhs == null) return 1; return lhs.compareTo(rhs); } });
@Override public List<WalkRequest> getWalkRequests() { return m_columnTrackers.stream() .map(c -> { WalkRequest walkRequest = new WalkRequest(c.getBase()); walkRequest.setMaxRepetitions(c.getMaxRepetitions()); return walkRequest; }) .collect(Collectors.toList()); }
@Override public boolean processErrors(int errorStatus, int errorIndex) throws SnmpException { if (m_retries == null) m_retries = getMaxRetries(); throw new SnmpException("Unable to handle tooBigError for next oid request after "+m_last); } else if (status == ErrorStatus.GEN_ERR) { reportGenErr("Received genErr requesting next oid after "+m_last+". Marking column is finished."); errorOccurred(); return true; } else if (status == ErrorStatus.NO_SUCH_NAME) { reportNoSuchNameErr("Received noSuchName requesting next oid after "+m_last+". Marking column is finished."); errorOccurred(); return true; } else if (status.isFatal()) { final ErrorStatusException ex = new ErrorStatusException(status, "Unexpected error processing next oid after "+m_last+". Aborting!"); reportFatalErr(ex); throw ex; } else if (status != ErrorStatus.NO_ERROR) { reportNonFatalErr(status); if (m_retries-- <= 0) { final ErrorStatusException ex = new ErrorStatusException(status, "Non-fatal error met maximum number of retries. Aborting!"); reportFatalErr(ex); throw ex; m_retries = getMaxRetries();
public void processResponse(SnmpObjId responseObjId, SnmpValue val) { if (val.isEndOfMib()) { receivedEndOfMib(); } m_last = responseObjId; if (m_base.isPrefixOf(responseObjId) && !m_base.equals(responseObjId)) { SnmpInstId inst = responseObjId.getInstance(m_base); if (inst != null) { storeResult(new SnmpResult(m_base, inst, val)); } } if (!m_base.isPrefixOf(m_last)) { setFinished(true); } }
public String toString() { return new ToStringBuilder(this) .append("base", m_base) .append("last oid", m_last) .append("max repetitions", m_maxRepetitions) .append("finished?", isFinished()) .toString(); } public ResponseProcessor buildNextPdu(PduBuilder pduBuilder) {
protected void errorOccurred() { setFinished(true); }
@Override public ResponseProcessor buildNextPdu(PduBuilder pduBuilder) throws SnmpException { if (pduBuilder.getMaxVarsPerPdu() < 1) { throw new IllegalArgumentException("maxVarsPerPdu < 1"); } List<ResponseProcessor> processors = new ArrayList<ResponseProcessor>(pduBuilder.getMaxVarsPerPdu()); for (ColumnTracker ct : getNextColumnTrackers(pduBuilder.getMaxVarsPerPdu())) { processors.add(ct.buildNextPdu(pduBuilder)); } return new CombinedColumnResponseProcessor(processors); }
pduBuilder.setMaxRepetitions(getMaxRepetitions());
@Override public void processResponse(SnmpObjId responseObjId, SnmpValue val) { if (val.isEndOfMib()) { receivedEndOfMib(); return; } LOG.debug("Processing varBind: {} = {}", responseObjId, val); m_last = responseObjId; if (m_base.isPrefixOf(responseObjId) && !m_base.equals(responseObjId)) { SnmpInstId inst = responseObjId.getInstance(m_base); if (inst != null) { storeResult(new SnmpResult(m_base, inst, val)); } } if (!m_base.isPrefixOf(m_last)) { setFinished(true); } }
private List<ColumnTracker> getNextColumnTrackers(int maxVarsPerPdu) { List<ColumnTracker> trackers = new ArrayList<ColumnTracker>(maxVarsPerPdu); List<ColumnTracker> sortedTrackerList = new ArrayList<ColumnTracker>(m_columnTrackers); Collections.sort(sortedTrackerList, new Comparator<ColumnTracker>() { public int compare(ColumnTracker o1, ColumnTracker o2) { return new CompareToBuilder() .append(o1.getLastInstance(), o2.getLastInstance()) .toComparison(); } }); for(Iterator<ColumnTracker> it = sortedTrackerList.iterator(); it.hasNext() && trackers.size() < maxVarsPerPdu; ) { ColumnTracker tracker = it.next(); if (!tracker.isFinished()) { trackers.add(tracker); } } return trackers; }
protected void receivedEndOfMib() { setFinished(true); }
@Override public ResponseProcessor buildNextPdu(PduBuilder pduBuilder) { if (pduBuilder.getMaxVarsPerPdu() < 1) { throw new IllegalArgumentException("maxVarsPerPdu < 1"); } List<ResponseProcessor> processors = new ArrayList<ResponseProcessor>(pduBuilder.getMaxVarsPerPdu()); for (ColumnTracker ct : getNextColumnTrackers(pduBuilder.getMaxVarsPerPdu())) { processors.add(ct.buildNextPdu(pduBuilder)); } return new CombinedColumnResponseProcessor(processors); }
pduBuilder.addOid(m_last); pduBuilder.setNonRepeaters(0); pduBuilder.setMaxRepetitions(getMaxRepetitions());
public TableTracker(RowCallback rc, int maxRepetitions, SnmpObjId... columns) { m_tableResult = new SnmpTableResult(rc == null ? this : rc, this, columns); m_columnTrackers = new ArrayList<ColumnTracker>(columns.length); for (SnmpObjId id : columns) { m_columnTrackers.add(new ColumnTracker(this, id, maxRepetitions)); } }
private List<ColumnTracker> getNextColumnTrackers(int maxVarsPerPdu) { List<ColumnTracker> trackers = new ArrayList<ColumnTracker>(maxVarsPerPdu); List<ColumnTracker> sortedTrackerList = new ArrayList<ColumnTracker>(m_columnTrackers); Collections.sort(sortedTrackerList, new Comparator<ColumnTracker>() { @Override public int compare(ColumnTracker o1, ColumnTracker o2) { SnmpInstId lhs = o1.getLastInstance(); SnmpInstId rhs = o2.getLastInstance(); if (lhs == rhs) return 0; if (lhs == null) return -1; if (rhs == null) return 1; return lhs.compareTo(rhs); } }); for(Iterator<ColumnTracker> it = sortedTrackerList.iterator(); it.hasNext() && trackers.size() < maxVarsPerPdu; ) { ColumnTracker tracker = it.next(); if (!tracker.isFinished()) { trackers.add(tracker); } } return trackers; }
protected void receivedEndOfMib() { setFinished(true); }
public int compare(ColumnTracker o1, ColumnTracker o2) { return new CompareToBuilder() .append(o1.getLastInstance(), o2.getLastInstance()) .toComparison(); } });
/** * <p>getCollectionTracker</p> * * @param instances a {@link java.util.Set} object. * @return a {@link org.opennms.netmgt.snmp.CollectionTracker} object. */ public CollectionTracker getCollectionTracker(final Set<SnmpInstId> instances) { if ( instances == null ) { return m_isTabular ? new ColumnTracker(getSnmpObjId()) : new SingleInstanceTracker(getSnmpObjId(), SnmpInstId.INST_ZERO); } else { final Collection<Collectable> trackers = new ArrayList<>(); for(final SnmpInstId inst : instances) { trackers.add(new SingleInstanceTracker(getSnmpObjId(), inst)); } return new AggregateTracker(trackers); } }