
fi.evolver.basics.spring.log.entity.MessageLog Maven / Gradle / Ivy
package fi.evolver.basics.spring.log.entity;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import fi.evolver.basics.spring.util.MessageChainUtils;
import fi.evolver.utils.ServerUtils;
import fi.evolver.utils.format.FormatUtils;
import jakarta.persistence.*;
@Entity
@Table(name="message_log")
public class MessageLog {
public enum Direction {
OUTBOUND,
INBOUND
}
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@Column(name="address")
private String address;
@Column(name="app_server")
private String appServer;
@Column(name="app_version")
private String appVersion;
@Column(name="duration_ms")
private Integer durationMs;
@Column(name="message_chain_id")
private long messageChainId;
@Enumerated(EnumType.STRING)
@Column(name="data_direction")
private Direction dataDirection;
@Column(name="message_type")
private String messageType;
@Column(name="protocol")
private String protocol;
@Column(name="request_headers")
private String requestHeaders;
@Column(name="request_message")
private byte[] requestMessage;
@Column(name="request_size")
private Integer requestSize;
@Column(name="response_headers")
private String responseHeaders;
@Column(name="response_message")
private byte[] responseMessage;
@Column(name="response_size")
private Integer responseSize;
@Column(name="requesting_system")
private String requestingSystem;
@Column(name="start_time")
private LocalDateTime startTime;
@Column(name="status_code")
private String statusCode;
@Column(name="status_message")
private String statusMessage;
@Column(name="responding_system")
private String respondingSystem;
@OneToMany(mappedBy="messageLog", cascade=CascadeType.ALL, orphanRemoval=true, fetch=FetchType.EAGER)
@OrderBy("id")
@Fetch(value = FetchMode.SUBSELECT)
private List metadata;
public MessageLog() { }
public MessageLog(
LocalDateTime startTime,
String appVersion,
String messageType,
String protocol,
String address,
String requestingSystem,
String respondingSystem,
Direction direction,
int requestSize,
byte[] requestMessage,
String requestHeaders,
int responseSize,
byte[] responseMessage,
String responseHeaders,
List metadata) {
this.startTime = startTime;
this.appServer = FormatUtils.truncatePretty(ServerUtils.LOCAL_HOST_NAME, 256);
this.appVersion = FormatUtils.truncatePretty(appVersion, 64);
this.messageType = FormatUtils.truncatePretty(messageType, 64);
this.protocol = FormatUtils.truncatePretty(protocol, 32);
this.requestingSystem = FormatUtils.truncatePretty(requestingSystem, 64);
this.respondingSystem = FormatUtils.truncatePretty(respondingSystem, 64);
this.address = FormatUtils.truncatePretty(address, 512);
this.dataDirection = direction;
this.messageChainId = MessageChainUtils.getMessageChainId();
this.requestSize = requestSize;
this.requestMessage = requestMessage;
this.requestHeaders = FormatUtils.truncatePretty(requestHeaders, 2000);
this.responseSize = responseSize;
this.responseMessage = responseMessage;
this.responseHeaders = FormatUtils.truncatePretty(responseHeaders, 2000);
addMetadata(metadata);
}
public long getId() {
return this.id;
}
public String getAddress() {
return this.address;
}
public String getAppServer() {
return appServer;
}
public String getAppVersion() {
return this.appVersion;
}
public Integer getDurationMs() {
return this.durationMs;
}
public long getMessageChainId() {
return this.messageChainId;
}
public String getMessageType() {
return this.messageType;
}
public List getMetadata() {
return Collections.unmodifiableList(metadata);
}
public void addMetadata(List metadata) {
if (this.metadata == null)
this.metadata = new ArrayList<>();
for (MessageLogMetadata metaDatum: metadata) {
metaDatum.setMessageLog(this);
this.metadata.add(metaDatum);
}
}
public String getProtocol() {
return this.protocol;
}
public String getRequestHeaders() {
return this.requestHeaders;
}
public byte[] getRequestMessage() {
return this.requestMessage;
}
public Integer getRequestSize() {
return this.requestSize;
}
public String getResponseHeaders() {
return this.responseHeaders;
}
public byte[] getResponseMessage() {
return this.responseMessage;
}
public Integer getResponseSize() {
return this.responseSize;
}
public String getRequestingSystem() {
return this.requestingSystem;
}
public LocalDateTime getStartTime() {
return this.startTime;
}
public String getStatusCode() {
return this.statusCode;
}
public String getStatusMessage() {
return this.statusMessage;
}
public String getRespondingSystem() {
return this.respondingSystem;
}
public Direction getDataDirection() {
return dataDirection;
}
public MessageLog setEndState(int durationMs, String statusCode, String statusMessage) {
this.durationMs = durationMs;
this.statusCode = FormatUtils.truncatePretty(statusCode, 64);
this.statusMessage = FormatUtils.truncatePretty(statusMessage, 128);
return this;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(getMessageType()).append(": ");
builder.append(getRequestingSystem()).append(' ');
if (getDataDirection() == Direction.INBOUND)
builder.append('<');
builder.append('=');
if (getDataDirection() == Direction.OUTBOUND)
builder.append('>');
builder.append(' ');
builder.append(getRespondingSystem());
return builder.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy