ONOS-4380 Refactor AlarmId and Alarm construction and update
Change-Id: I0117afda723ba27aadb1db306f7ce15b666f102d
diff --git a/apps/faultmanagement/fmmgr/src/main/java/org/onosproject/faultmanagement/impl/AlarmManager.java b/apps/faultmanagement/fmmgr/src/main/java/org/onosproject/faultmanagement/impl/AlarmManager.java
index 7f78cda..bfe7627 100644
--- a/apps/faultmanagement/fmmgr/src/main/java/org/onosproject/faultmanagement/impl/AlarmManager.java
+++ b/apps/faultmanagement/fmmgr/src/main/java/org/onosproject/faultmanagement/impl/AlarmManager.java
@@ -16,7 +16,6 @@
package org.onosproject.faultmanagement.impl;
import com.google.common.collect.ImmutableSet;
-import org.apache.commons.collections.CollectionUtils;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -95,33 +94,52 @@
return true;
}
+ //TODO maybe map for field to update ?
@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);
+ store.createOrUpdateAlarm(updated);
return updated;
}
- public Alarm clear(AlarmId id) {
+ @Override
+ public Alarm updateBookkeepingFields(AlarmId id, boolean clear, boolean isAcknowledged,
+ String assignedUser) {
+ checkNotNull(id, "Alarm id is null");
Alarm found = store.getAlarm(id);
if (found == null) {
- log.warn("Alarm {} is not present", id);
- return null;
+ throw new ItemNotFoundException("Alarm with id " + id + " found");
}
- Alarm updated = new DefaultAlarm.Builder(found).withId(id).clear().build();
- store.setAlarm(updated);
+ long now = System.currentTimeMillis();
+ DefaultAlarm.Builder alarmBuilder = new DefaultAlarm.Builder(found).withTimeUpdated(now);
+ if (found.cleared() != clear) {
+ alarmBuilder.clear().withTimeCleared(now);
+ }
+ if (found.acknowledged() != isAcknowledged) {
+ alarmBuilder.withAcknowledged(isAcknowledged);
+ }
+ if (assignedUser != null && !found.assignedUser().equals(assignedUser)) {
+ alarmBuilder.withAssignedUser(assignedUser);
+ }
+ DefaultAlarm updated = alarmBuilder.build();
+ store.createOrUpdateAlarm(updated);
return updated;
}
+ //TODO move to AlarmAdminService
+ @Override
+ public void remove(AlarmId id) {
+ checkNotNull(id, "Alarm id is null");
+ store.removeAlarm(id);
+ }
+
@Override
public Map<Alarm.SeverityLevel, Long> getAlarmCounts(DeviceId deviceId) {
return getAlarms(deviceId).stream().collect(
@@ -185,35 +203,6 @@
return new InternalAlarmProviderService(provider);
}
- // Synchronised to prevent duplicate NE alarms being raised
- 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());
- });
- }
-
- //TODO improve implementation of AlarmId
- private AlarmId generateAlarmId() {
- return AlarmId.alarmId(alarmIdGenerator.incrementAndGet());
- }
-
private class InternalAlarmProviderService extends AbstractProviderService<AlarmProvider>
implements AlarmProviderService {
@@ -223,7 +212,7 @@
@Override
public void updateAlarmList(DeviceId deviceId, Collection<Alarm> alarms) {
- updateAlarms(deviceId, ImmutableSet.copyOf(alarms));
+ alarms.forEach(alarm -> store.createOrUpdateAlarm(alarm));
}
}
}