[New] Implemented simple OperationsLog to storing messages

This commit is contained in:
Robert von Burg 2017-06-14 12:53:08 +02:00
parent bab203e418
commit 6171e53ff4
5 changed files with 184 additions and 0 deletions

View File

@ -63,6 +63,11 @@ public class Tags {
public static final String RESOURCE_TYPE = "ResourceType";
public static final String STATE_ID = "StateId";
public static final String LOCATOR = "Locator";
public static final String SEVERITY = "Severity";
public static final String KEY = "Key";
public static final String MESSAGE = "Message";
public static class Json {
// elements
@ -107,6 +112,11 @@ public class Tags {
public static final String CREATED_BY = "createdBy";
public static final String DELETED = "deleted";
public static final String LOCATOR = "locator";
public static final String SEVERITY = "severity";
public static final String KEY = "key";
public static final String MESSAGE = "message";
// miscellaneous
public static final String ELEMENTS = "elements";

View File

@ -0,0 +1,50 @@
package li.strolch.handler.operationslog;
import com.google.gson.JsonObject;
import li.strolch.model.Locator;
import li.strolch.model.Tags.Json;
import li.strolch.utils.I18nMessage;
public class LogMessage extends I18nMessage {
private final Locator locator;
private final LogSeverity severity;
public LogMessage(Locator locator, LogSeverity logSeverity, String bundleId, String key) {
super(bundleId, key);
this.locator = locator;
this.severity = logSeverity;
}
public LogSeverity getSeverity() {
return this.severity;
}
public Locator getLocator() {
return this.locator;
}
@Override
public LogMessage value(String key, String value) {
super.value(key, value);
return this;
}
public JsonObject toJson() {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty(Json.KEY, getKey());
jsonObject.addProperty(Json.MESSAGE, formatMessage());
jsonObject.addProperty(Json.SEVERITY, this.severity.getSeverity());
jsonObject.addProperty(Json.LOCATOR, this.locator.toString());
JsonObject values = new JsonObject();
for (String key : getValues().stringPropertyNames()) {
values.addProperty(key, getValues().getProperty(key));
}
jsonObject.add(Json.VALUES, values);
return jsonObject;
}
}

View File

@ -0,0 +1,27 @@
package li.strolch.handler.operationslog;
public enum LogSeverity {
INFO("Info"), //
WARN("Warn"), //
ERROR("Error"), //
EXCEPTION("Exception");
private String severity;
private LogSeverity(String severity) {
this.severity = severity;
}
public String getSeverity() {
return this.severity;
}
public static LogSeverity from(String value) {
for (LogSeverity type : values()) {
if (type.severity.equals(value))
return type;
}
throw new IllegalArgumentException("No severity exists for " + value);
}
}

View File

@ -0,0 +1,48 @@
package li.strolch.handler.operationslog;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.stream.Collectors;
import li.strolch.agent.api.ComponentContainer;
import li.strolch.agent.api.StrolchComponent;
import li.strolch.model.Locator;
import li.strolch.runtime.configuration.ComponentConfiguration;
public class OperationsLog extends StrolchComponent {
private LinkedHashMap<Locator, LogMessage> logMessages;
public OperationsLog(ComponentContainer container, String componentName) {
super(container, componentName);
}
@Override
public void initialize(ComponentConfiguration configuration) throws Exception {
int maxMessages = configuration.getInt("maxMessages", 10000);
this.logMessages = new LinkedHashMap<Locator, LogMessage>() {
private static final long serialVersionUID = 1L;
@Override
protected boolean removeEldestEntry(java.util.Map.Entry<Locator, LogMessage> eldest) {
return size() > maxMessages;
}
};
super.initialize(configuration);
}
public void addMessage(LogMessage logMessage) {
this.logMessages.put(logMessage.getLocator(), logMessage);
}
public LogMessage getMessage(Locator locator) {
return this.logMessages.get(locator);
}
public List<LogMessage> getMessages() {
return this.logMessages.entrySet().stream().map(e -> e.getValue()).collect(Collectors.toList());
}
}

View File

@ -0,0 +1,49 @@
package li.strolch.utils;
import static li.strolch.utils.helper.StringHelper.EMPTY;
import java.util.Properties;
import java.util.ResourceBundle;
import li.strolch.utils.dbc.DBC;
import li.strolch.utils.helper.StringHelper;
public class I18nMessage {
private String bundleId;
private String key;
private Properties values;
public I18nMessage(String bundleId, String key) {
DBC.INTERIM.assertNotEmpty("bundleId must be set!", bundleId);
DBC.INTERIM.assertNotEmpty("key must be set!", key);
this.bundleId = bundleId;
this.key = key;
this.values = new Properties();
}
public String getBundleId() {
return this.bundleId;
}
public String getKey() {
return this.key;
}
public Properties getValues() {
return this.values;
}
public I18nMessage value(String key, String value) {
DBC.INTERIM.assertNotEmpty("key must be set!", key);
DBC.INTERIM.assertNotEmpty("value must be set!", value);
this.values.setProperty(key, value);
return this;
}
public String formatMessage() {
ResourceBundle bundle = ResourceBundle.getBundle(this.bundleId);
String string = bundle.getString(this.key);
return StringHelper.replacePropertiesIn(this.values, EMPTY, string);
}
}