diff --git a/li.strolch.agent/src/main/java/li/strolch/handler/operationslog/OperationsLog.java b/li.strolch.agent/src/main/java/li/strolch/handler/operationslog/OperationsLog.java index dc0425ed9..7ee65953e 100644 --- a/li.strolch.agent/src/main/java/li/strolch/handler/operationslog/OperationsLog.java +++ b/li.strolch.agent/src/main/java/li/strolch/handler/operationslog/OperationsLog.java @@ -23,7 +23,7 @@ import li.strolch.runtime.configuration.ComponentConfiguration; public class OperationsLog extends StrolchComponent { - private Map> logMessagesByRealmAndId; + private Map> logMessagesByRealmAndId; private Map>> logMessagesByLocator; private int maxMessages; private ExecutorService executorService; @@ -61,7 +61,7 @@ public class OperationsLog extends StrolchComponent { LogMessageDao logMessageDao = tx.getPersistenceHandler().getLogMessageDao(tx); List messages = logMessageDao.queryLatest(realmName, this.maxMessages); logger.info("Loaded " + messages.size() + " messages for OperationsLog for realm " + realmName); - this.logMessagesByRealmAndId.put(realmName, messages); + this.logMessagesByRealmAndId.put(realmName, new LinkedHashSet<>(messages)); } catch (RuntimeException e) { logger.error("Failed to load operations log for realm " + realmName, e); } @@ -81,14 +81,15 @@ public class OperationsLog extends StrolchComponent { // store in global list String realmName = logMessage.getRealm(); - List logMessages = this.logMessagesByRealmAndId.computeIfAbsent(realmName, r -> new ArrayList<>()); + LinkedHashSet logMessages = this.logMessagesByRealmAndId.computeIfAbsent(realmName, + r -> new LinkedHashSet<>()); logMessages.add(logMessage); // store under locator - LinkedHashMap> logMessagesLocator = this.logMessagesByLocator - .computeIfAbsent(realmName, this::newBoundedLocatorMap); - LinkedHashSet messages = logMessagesLocator - .computeIfAbsent(logMessage.getLocator(), (l) -> new LinkedHashSet<>()); + LinkedHashMap> logMessagesLocator = this.logMessagesByLocator.computeIfAbsent( + realmName, this::newBoundedLocatorMap); + LinkedHashSet messages = logMessagesLocator.computeIfAbsent(logMessage.getLocator(), + (l) -> new LinkedHashSet<>()); messages.add(logMessage); // prune if necessary @@ -107,7 +108,7 @@ public class OperationsLog extends StrolchComponent { if (byLocator != null) byLocator.remove(message.getLocator()); - List messages = this.logMessagesByRealmAndId.get(realmName); + LinkedHashSet messages = this.logMessagesByRealmAndId.get(realmName); if (messages != null) { messages.remove(message); @@ -129,7 +130,7 @@ public class OperationsLog extends StrolchComponent { if (byLocator != null) messages.forEach(logMessage -> byLocator.remove(logMessage.getLocator())); - List byRealm = this.logMessagesByRealmAndId.get(realmName); + LinkedHashSet byRealm = this.logMessagesByRealmAndId.get(realmName); if (byRealm != null) { messages.removeIf(logMessage -> !byRealm.remove(logMessage)); @@ -153,7 +154,7 @@ public class OperationsLog extends StrolchComponent { } public synchronized void updateState(String realmName, String id, LogMessageState state) { - List logMessages = this.logMessagesByRealmAndId.get(realmName); + LinkedHashSet logMessages = this.logMessagesByRealmAndId.get(realmName); for (LogMessage logMessage : logMessages) { if (logMessage.getId().equals(id)) { logMessage.setState(state); @@ -166,7 +167,7 @@ public class OperationsLog extends StrolchComponent { } } - private List pruneMessages(List logMessages) { + private List pruneMessages(LinkedHashSet logMessages) { if (logMessages.size() < this.maxMessages) return emptyList(); @@ -204,7 +205,7 @@ public class OperationsLog extends StrolchComponent { } catch (Exception e) { logger.error("Failed to persist operations logs!", e); synchronized (this) { - this.logMessagesByRealmAndId.computeIfAbsent(realm.getRealm(), r -> new ArrayList<>()) + this.logMessagesByRealmAndId.computeIfAbsent(realm.getRealm(), r -> new LinkedHashSet<>()) .add(new LogMessage(realm.getRealm(), SYSTEM_USER_AGENT, Locator.valueOf(AGENT, "strolch-agent", StrolchAgent.getUniqueId()), LogSeverity.Info, LogMessageState.Information, ResourceBundle.getBundle("strolch-agent"), @@ -227,7 +228,7 @@ public class OperationsLog extends StrolchComponent { } catch (Exception e) { logger.error("Failed to persist operations logs!", e); synchronized (this) { - this.logMessagesByRealmAndId.computeIfAbsent(realm.getRealm(), r -> new ArrayList<>()) + this.logMessagesByRealmAndId.computeIfAbsent(realm.getRealm(), r -> new LinkedHashSet<>()) .add(new LogMessage(realm.getRealm(), SYSTEM_USER_AGENT, Locator.valueOf(AGENT, "strolch-agent", StrolchAgent.getUniqueId()), LogSeverity.Info, LogMessageState.Information, ResourceBundle.getBundle("strolch-agent"), @@ -252,7 +253,7 @@ public class OperationsLog extends StrolchComponent { } public synchronized List getMessages(String realm) { - List logMessages = this.logMessagesByRealmAndId.get(realm); + LinkedHashSet logMessages = this.logMessagesByRealmAndId.get(realm); if (logMessages == null) return emptyList(); @@ -260,7 +261,7 @@ public class OperationsLog extends StrolchComponent { } private LinkedHashMap> newBoundedLocatorMap(String realm) { - return new LinkedHashMap>() { + return new LinkedHashMap<>() { @Override protected boolean removeEldestEntry(java.util.Map.Entry> eldest) { return size() > maxMessages;