protected synchronized void updateAlarms(DeviceId deviceId, Set<Alarm> discoveredSet) { Set<Alarm> storedSet = getActiveAlarms(deviceId); log.debug("CurrentNeAlarms={}. DiscoveredAlarms={}", storedSet, discoveredSet); if (CollectionUtils.isEqualCollection(storedSet, discoveredSet)) { log.debug("No update for {}.", deviceId); return; } //TODO implement distinction between UPDATED and CLEARED ALARMS storedSet.stream().filter( (stored) -> (!discoveredSet.contains(stored))).forEach((stored) -> { log.debug("Alarm will be Cleared as it is not on the device. Cleared alarm: {}.", stored); clear(stored.id()); }); discoveredSet.stream().filter( (discovered) -> (!storedSet.contains(discovered))).forEach((discovered) -> { log.info("New alarm raised {}", discovered); AlarmId id = generateAlarmId(); store.setAlarm(new DefaultAlarm.Builder(discovered).withId(id).build()); }); }
@Override public Collection<Alarm> getAlarms(ISnmpSession session, DeviceId deviceId) { Set<Alarm> alarms = new HashSet<>(); NetworkDevice networkDevice = new NetworkDevice(CLASS_REGISTRY, session.getAddress().getHostAddress()); try { session.walkDevice(networkDevice, Arrays.asList(new OID[]{ CLASS_REGISTRY.getClassToOidMap().get(IfTable.class)})); IfTable interfaceTable = (IfTable) networkDevice.getRootObject() .getEntity(CLASS_REGISTRY.getClassToOidMap().get(IfTable.class)); if (interfaceTable != null) { interfaceTable.getEntries().values().stream().forEach((ifEntry) -> { //TODO will raise alarm for each interface as a demo. // if (ifEntry.getIfAdminStatus() == 1 && ifEntry.getIfOperStatus() == 2){ alarms.add(new DefaultAlarm.Builder(deviceId, "Link Down.", Alarm.SeverityLevel.CRITICAL, System.currentTimeMillis()) .forSource(AlarmEntityId.alarmEntityId("port:" + ifEntry.getIfDescr())).build()); // } log.info("Interface: " + ifEntry); }); } } catch (IOException ex) { log.error("Error reading alarms for device {}.", deviceId, ex); } return alarms; } }
private static DefaultAlarm buildWalkFailedAlarm(DeviceId deviceId) { return new DefaultAlarm.Builder( deviceId, "SNMP alarm retrieval failed", Alarm.SeverityLevel.CRITICAL, System.currentTimeMillis()).build(); }
@Override public Collection<Alarm> getAlarms(ISnmpSession session, DeviceId deviceID) { log.info("Getting alarms for BTI 7000 device at {}", deviceID); Set<Alarm> alarms = new HashSet<>(); NetworkDevice networkDevice = new NetworkDevice(CLASS_REGISTRY, session.getAddress().getHostAddress()); try { session.walkDevice(networkDevice, Arrays.asList( new OID[]{CLASS_REGISTRY.getClassToOidMap().get(ActAlarmTable.class)})); IActAlarmTable deviceAlarms = (IActAlarmTable) networkDevice.getRootObject() .getEntity(CLASS_REGISTRY.getClassToOidMap().get(ActAlarmTable.class)); if ((deviceAlarms != null) && (deviceAlarms.getActAlarmEntry() != null) && (!deviceAlarms.getActAlarmEntry().isEmpty())) { deviceAlarms.getActAlarmEntry().values().stream().forEach((alarm) -> { DefaultAlarm.Builder alarmBuilder = new DefaultAlarm.Builder( deviceID, alarm.getActAlarmDescription(), mapAlarmSeverity(alarm.getActAlarmSeverity()), getLocalDateAndTime(alarm.getActAlarmDateAndTime(), null, null).getTime()) .forSource(AlarmEntityId.alarmEntityId("other:" + alarm.getActAlarmInstanceIdx())); alarms.add(alarmBuilder.build()); }); } log.info("Conditions retrieved: {}", deviceAlarms); } catch (IOException ex) { log.error("Error reading alarms for device {}.", deviceID, ex); } return alarms; }
@Override public Alarm updateBookkeepingFields(AlarmId id, boolean isAcknowledged, String assignedUser) { Alarm found = store.getAlarm(id); if (found == null) { throw new ItemNotFoundException("Alarm with id " + id + " found"); } Alarm updated = new DefaultAlarm.Builder(found) .withId(found.id()) .withAcknowledged(isAcknowledged) .withAssignedUser(assignedUser).build(); store.setAlarm(updated); return updated; }
@Override public DefaultAlarm buildWalkFailedAlarm(DeviceId deviceId) { return new DefaultAlarm.Builder( deviceId, "SNMP alarm retrieval failed", Alarm.SeverityLevel.CRITICAL, System.currentTimeMillis()).build(); } }
public Alarm clear(AlarmId id) { Alarm found = store.getAlarm(id); if (found == null) { log.warn("Alarm {} is not present", id); return null; } Alarm updated = new DefaultAlarm.Builder(found).withId(id).clear().build(); store.setAlarm(updated); return updated; }