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

fi.evolver.basics.spring.log.entity.MessageLogStatistic Maven / Gradle / Ivy

There is a newer version: 6.7.0
Show newest version
package fi.evolver.basics.spring.log.entity;

import java.time.LocalDateTime;
import java.util.regex.Pattern;

import jakarta.persistence.*;

@Entity
@Table(name="message_log_statistic")
public class MessageLogStatistic {
	private static final Pattern REGEX_SUCCESS = Pattern.compile("2\\d\\d|OK");

	private static final double TOTAL_WEIGHT = 10.0;

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private long id;


	@Column(name="message_type")
	private String messageType;

	@Column(name="source_system")
	private String sourceSystem;

	@Column(name="target_system")
	private String targetSystem;

	@Column(name="success_rate")
	private double successRate;


	@Column(name="last_failure_duration_ms")
	private Integer lastFailureDurationMs;

	@Column(name="last_failure_start")
	private LocalDateTime lastFailureStart;

	@Column(name="failure_duration_ht")
	private double failureDurationHt;


	@Column(name="last_success_duration_ms")
	private Integer lastSuccessDurationMs;

	@Column(name="last_success_start")
	private LocalDateTime lastSuccessStart;

	@Column(name="success_duration_ht")
	private double successDurationHt;


	public MessageLogStatistic() { }

	public MessageLogStatistic(MessageLog messageLog) {
		this.messageType = messageLog.getMessageType();
		this.sourceSystem = messageLog.getRequestingSystem();
		this.targetSystem = messageLog.getRespondingSystem();
		if (REGEX_SUCCESS.matcher(messageLog.getStatusCode()).matches())
			this.successRate = 1.0;
	}


	public String getMessageType() {
        return messageType;
    }

	public String getSourceSystem() {
        return sourceSystem;
    }

	public String getTargetSystem() {
        return targetSystem;
    }

	public double getSuccessRate() {
        return successRate;
    }

	public LocalDateTime getLastSuccessStart() {
        return lastSuccessStart;
    }

	public LocalDateTime getLastFailureStart() {
        return lastFailureStart;
    }

	public double getSuccessDurationHt() {
        return successDurationHt;
    }

	public double getFailureDurationHt() {
        return failureDurationHt;
    }


	public void update(MessageLog messageLog) {
		boolean success = REGEX_SUCCESS.matcher(messageLog.getStatusCode()).matches();
		successRate = calculateWeightedAverage(successRate, success ? 1.0 : 0.0);

		if (success) {
			lastSuccessDurationMs = messageLog.getDurationMs();
			successDurationHt = lastSuccessStart == null ? lastSuccessDurationMs : calculateWeightedAverage(successDurationHt, lastSuccessDurationMs);
			lastSuccessStart = messageLog.getStartTime();
		}
		else {
			lastFailureDurationMs = messageLog.getDurationMs();
			failureDurationHt = lastFailureStart == null ? lastFailureDurationMs : calculateWeightedAverage(failureDurationHt, lastFailureDurationMs);
			lastFailureStart = messageLog.getStartTime();
		}
	}


	private static double calculateWeightedAverage(double oldValue, double newValue) {
		return (oldValue * (TOTAL_WEIGHT - 1.0) + newValue) / TOTAL_WEIGHT;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy