All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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