package de.slackspace.alfa.domain;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
public class LogEntry extends AbstractEntry implements ElasticSearchEntry {
private String level;
private String message;
private String formattedMessage;
private String eventId;
private String severity;
private transient String elasticIndex;
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
setSeverity(mapSeverity(level));
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
if(message != null) {
message = message.replaceAll("\r\n", "");
}
this.message = message;
}
public String getEventId() {
return eventId;
}
public void setEventId(String eventId) {
this.eventId = eventId;
}
public String mapSeverity(String lvl) {
switch (lvl) {
case "0": return "Undefined";
case "1": return "Critical";
case "2": return "Error";
case "3": return "Warning";
case "4": return "Information";
case "5": return "Verbose";
default: return "Undefined";
}
}
public String getSeverity() {
return severity;
}
public void setSeverity(String severity) {
this.severity = severity;
}
public String getElasticIndex() {
return "logs-" + elasticIndex;
}
public void setElasticIndex(String elasticIndex) {
this.elasticIndex = elasticIndex;
}
@Override
public String toString() {
return "LogEntry [partitionKey=" + getPartitionKey() + ", message="
+ message + "]";
}
@Override
public String getType() {
return severity;
}
public Map<String, XContentBuilder> getIndexMappings() throws IOException {
Map<String, XContentBuilder> map = new HashMap<>();
map.put("Information", createMappingJson("Information"));
map.put("Error", createMappingJson("Error"));
map.put("Warning", createMappingJson("Warning"));
map.put("Verbose", createMappingJson("Verbose"));
return map;
}
private XContentBuilder createMappingJson(String typeName) throws IOException {
XContentBuilder mappingBuilder = XContentFactory.jsonBuilder().startObject().startObject(typeName)
.startObject("properties")
.startObject("dateTime").field("type", "date").endObject()
.startObject("deploymentId").field("type", "string").field("index", "not_analyzed").endObject()
.startObject("environment").field("type", "string").field("index", "not_analyzed").endObject()
.startObject("eventId").field("type", "string").endObject()
.startObject("level").field("type", "long").endObject()
.startObject("message").field("type", "string").endObject()
.startObject("formattedMessage").field("type", "string").endObject()
.startObject("partitionKey").field("type", "long").endObject()
.startObject("role").field("type", "string").field("index", "not_analyzed").endObject()
.startObject("roleInstance").field("type", "string").field("index", "not_analyzed").endObject()
.startObject("rowKey").field("type", "string").field("index", "not_analyzed").endObject()
.startObject("severity").field("type", "string").field("index", "not_analyzed").endObject()
.startObject("timestamp").field("type", "long").endObject()
.endObject()
.endObject()
.endObject();
return mappingBuilder;
}
public String getFormattedMessage() {
return formattedMessage;
}
public void setFormattedMessage(String formattedMessage) {
this.formattedMessage = formattedMessage;
}
}