
fi.evolver.basics.spring.log.entity.MessageLogStatistic Maven / Gradle / Ivy
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