[Major] LogMessage now has an ID which is used in OperationsLog
This commit is contained in:
parent
9b92d2fdbc
commit
e459b561b8
|
@ -4,6 +4,7 @@ import java.util.ResourceBundle;
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
|
import li.strolch.agent.api.StrolchAgent;
|
||||||
import li.strolch.model.Locator;
|
import li.strolch.model.Locator;
|
||||||
import li.strolch.model.Tags.Json;
|
import li.strolch.model.Tags.Json;
|
||||||
import li.strolch.utils.I18nMessage;
|
import li.strolch.utils.I18nMessage;
|
||||||
|
@ -11,17 +12,23 @@ import li.strolch.utils.helper.ExceptionHelper;
|
||||||
|
|
||||||
public class LogMessage extends I18nMessage {
|
public class LogMessage extends I18nMessage {
|
||||||
|
|
||||||
|
private final String id;
|
||||||
private final String realm;
|
private final String realm;
|
||||||
private final Locator locator;
|
private final Locator locator;
|
||||||
private final LogSeverity severity;
|
private final LogSeverity severity;
|
||||||
|
|
||||||
public LogMessage(String realm, Locator locator, LogSeverity logSeverity, ResourceBundle bundle, String key) {
|
public LogMessage(String realm, Locator locator, LogSeverity logSeverity, ResourceBundle bundle, String key) {
|
||||||
super(bundle, key);
|
super(bundle, key);
|
||||||
|
this.id = StrolchAgent.getUniqueId();
|
||||||
this.realm = realm;
|
this.realm = realm;
|
||||||
this.locator = locator;
|
this.locator = locator;
|
||||||
this.severity = logSeverity;
|
this.severity = logSeverity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return this.id;
|
||||||
|
}
|
||||||
|
|
||||||
public String getRealm() {
|
public String getRealm() {
|
||||||
return this.realm;
|
return this.realm;
|
||||||
}
|
}
|
||||||
|
@ -49,6 +56,7 @@ public class LogMessage extends I18nMessage {
|
||||||
|
|
||||||
JsonObject jsonObject = new JsonObject();
|
JsonObject jsonObject = new JsonObject();
|
||||||
|
|
||||||
|
jsonObject.addProperty(Json.ID, this.id);
|
||||||
jsonObject.addProperty(Json.KEY, getKey());
|
jsonObject.addProperty(Json.KEY, getKey());
|
||||||
jsonObject.addProperty(Json.MESSAGE, formatMessage());
|
jsonObject.addProperty(Json.MESSAGE, formatMessage());
|
||||||
jsonObject.addProperty(Json.SEVERITY, this.severity.getSeverity());
|
jsonObject.addProperty(Json.SEVERITY, this.severity.getSeverity());
|
||||||
|
@ -62,4 +70,29 @@ public class LogMessage extends I18nMessage {
|
||||||
|
|
||||||
return jsonObject;
|
return jsonObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
final int prime = 31;
|
||||||
|
int result = 1;
|
||||||
|
result = prime * result + ((this.id == null) ? 0 : this.id.hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
LogMessage other = (LogMessage) obj;
|
||||||
|
if (this.id == null) {
|
||||||
|
if (other.id != null)
|
||||||
|
return false;
|
||||||
|
} else if (!this.id.equals(other.id))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package li.strolch.handler.operationslog;
|
package li.strolch.handler.operationslog;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
|
@ -15,7 +16,8 @@ import li.strolch.runtime.configuration.ComponentConfiguration;
|
||||||
|
|
||||||
public class OperationsLog extends StrolchComponent {
|
public class OperationsLog extends StrolchComponent {
|
||||||
|
|
||||||
private Map<String, LinkedHashMap<Locator, LogMessage>> logMessagesByRealm;
|
private Map<String, LinkedHashMap<String, LogMessage>> logMessagesById;
|
||||||
|
private Map<String, LinkedHashMap<Locator, List<LogMessage>>> logMessagesByLocator;
|
||||||
private int maxMessages;
|
private int maxMessages;
|
||||||
|
|
||||||
public OperationsLog(ComponentContainer container, String componentName) {
|
public OperationsLog(ComponentContainer container, String componentName) {
|
||||||
|
@ -27,41 +29,67 @@ public class OperationsLog extends StrolchComponent {
|
||||||
|
|
||||||
this.maxMessages = configuration.getInt("maxMessages", 10000);
|
this.maxMessages = configuration.getInt("maxMessages", 10000);
|
||||||
|
|
||||||
this.logMessagesByRealm = new HashMap<>();
|
this.logMessagesById = new HashMap<>();
|
||||||
|
this.logMessagesByLocator = new HashMap<>();
|
||||||
|
|
||||||
super.initialize(configuration);
|
super.initialize(configuration);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addMessage(LogMessage logMessage) {
|
public void addMessage(LogMessage logMessage) {
|
||||||
|
|
||||||
LinkedHashMap<Locator, LogMessage> logMessages = this.logMessagesByRealm.computeIfAbsent(logMessage.getRealm(),
|
// store in global list
|
||||||
this::newBoundedMap);
|
LinkedHashMap<String, LogMessage> logMessages = this.logMessagesById.computeIfAbsent(logMessage.getRealm(),
|
||||||
|
this::newBoundedStringMap);
|
||||||
|
logMessages.put(logMessage.getId(), logMessage);
|
||||||
|
|
||||||
logMessages.put(logMessage.getLocator(), logMessage);
|
// store under locator
|
||||||
|
LinkedHashMap<Locator, List<LogMessage>> logMessagesLocator = this.logMessagesByLocator
|
||||||
|
.computeIfAbsent(logMessage.getRealm(), this::newBoundedLocatorMap);
|
||||||
|
List<LogMessage> messages = logMessagesLocator.computeIfAbsent(logMessage.getLocator(),
|
||||||
|
(l) -> new ArrayList<LogMessage>());
|
||||||
|
messages.add(logMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
private LinkedHashMap<Locator, LogMessage> newBoundedMap(String realm) {
|
public void clearMessages(String realm, Locator locator) {
|
||||||
return new LinkedHashMap<Locator, LogMessage>() {
|
LinkedHashMap<Locator, List<LogMessage>> logMessages = this.logMessagesByLocator.get(realm);
|
||||||
private static final long serialVersionUID = 1L;
|
if (logMessages != null)
|
||||||
|
logMessages.remove(locator);
|
||||||
@Override
|
|
||||||
protected boolean removeEldestEntry(java.util.Map.Entry<Locator, LogMessage> eldest) {
|
|
||||||
return size() > maxMessages;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<LogMessage> getMessage(String realm, Locator locator) {
|
public Optional<List<LogMessage>> getMessagesFor(String realm, Locator locator) {
|
||||||
LinkedHashMap<Locator, LogMessage> logMessages = this.logMessagesByRealm.computeIfAbsent(realm,
|
LinkedHashMap<Locator, List<LogMessage>> logMessages = this.logMessagesByLocator.get(realm);
|
||||||
this::newBoundedMap);
|
if (logMessages == null)
|
||||||
|
return Optional.empty();
|
||||||
return Optional.ofNullable(logMessages.get(locator));
|
return Optional.ofNullable(logMessages.get(locator));
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<LogMessage> getMessages(String realm) {
|
public List<LogMessage> getMessages(String realm) {
|
||||||
LinkedHashMap<Locator, LogMessage> logMessages = this.logMessagesByRealm.get(realm);
|
LinkedHashMap<String, LogMessage> logMessages = this.logMessagesById.get(realm);
|
||||||
if (logMessages == null)
|
if (logMessages == null)
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
|
|
||||||
return logMessages.entrySet().stream().map(e -> e.getValue()).collect(Collectors.toList());
|
return logMessages.entrySet().stream().map(e -> e.getValue()).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private LinkedHashMap<String, LogMessage> newBoundedStringMap(String realm) {
|
||||||
|
return new LinkedHashMap<String, LogMessage>() {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean removeEldestEntry(java.util.Map.Entry<String, LogMessage> eldest) {
|
||||||
|
return size() > maxMessages;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private LinkedHashMap<Locator, List<LogMessage>> newBoundedLocatorMap(String realm) {
|
||||||
|
return new LinkedHashMap<Locator, List<LogMessage>>() {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean removeEldestEntry(java.util.Map.Entry<Locator, List<LogMessage>> eldest) {
|
||||||
|
return size() > maxMessages;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,6 +69,7 @@ public class Tags {
|
||||||
public static final String SEVERITY = "Severity";
|
public static final String SEVERITY = "Severity";
|
||||||
public static final String KEY = "Key";
|
public static final String KEY = "Key";
|
||||||
public static final String MESSAGE = "Message";
|
public static final String MESSAGE = "Message";
|
||||||
|
public static final String MESSAGES = "Messages";
|
||||||
public static final String REALM = "Realm";
|
public static final String REALM = "Realm";
|
||||||
|
|
||||||
public static class Json {
|
public static class Json {
|
||||||
|
@ -119,6 +120,7 @@ public class Tags {
|
||||||
public static final String SEVERITY = "severity";
|
public static final String SEVERITY = "severity";
|
||||||
public static final String KEY = "key";
|
public static final String KEY = "key";
|
||||||
public static final String MESSAGE = "message";
|
public static final String MESSAGE = "message";
|
||||||
|
public static final String MESSAGES = "messages";
|
||||||
public static final String REALM = "realm";
|
public static final String REALM = "realm";
|
||||||
|
|
||||||
// miscellaneous
|
// miscellaneous
|
||||||
|
|
Loading…
Reference in New Issue