package com.hubspot.singularity;
import java.util.Objects;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.Optional;
import com.google.common.collect.ComparisonChain;
public class SingularityRequestHistory implements Comparable<SingularityRequestHistory>, SingularityHistoryItem {
private final long createdAt;
private final Optional<String> user;
private final RequestHistoryType eventType;
private final SingularityRequest request;
private final Optional<String> message;
public enum RequestHistoryType {
CREATED, UPDATED, DELETING, DELETED, PAUSED, UNPAUSED, ENTERED_COOLDOWN, EXITED_COOLDOWN, FINISHED, DEPLOYED_TO_UNPAUSE, BOUNCED, SCALED, SCALE_REVERTED;
}
@JsonCreator
public SingularityRequestHistory(@JsonProperty("createdAt") long createdAt, @JsonProperty("user") Optional<String> user,
@JsonProperty("eventType") RequestHistoryType eventType, @JsonProperty("request") SingularityRequest request, @JsonProperty("message") Optional<String> message) {
this.createdAt = createdAt;
this.user = user;
this.eventType = eventType;
this.request = request;
this.message = message;
}
@Override
public int compareTo(SingularityRequestHistory o) {
return ComparisonChain
.start()
.compare(o.getCreatedAt(), createdAt)
.compare(request.getId(), o.getRequest().getId())
.result();
}
public long getCreatedAt() {
return createdAt;
}
public Optional<String> getUser() {
return user;
}
@Deprecated
@JsonIgnore
public RequestHistoryType getState() {
return eventType;
}
public RequestHistoryType getEventType() {
return eventType;
}
public SingularityRequest getRequest() {
return request;
}
public Optional<String> getMessage() {
return message;
}
@Override
@JsonIgnore
public long getCreateTimestampForCalculatingHistoryAge() {
return createdAt;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
SingularityRequestHistory that = (SingularityRequestHistory) o;
return createdAt == that.createdAt &&
Objects.equals(user, that.user) &&
eventType == that.eventType &&
Objects.equals(request, that.request) &&
Objects.equals(message, that.message);
}
@Override
public int hashCode() {
return Objects.hash(createdAt, user, eventType, request, message);
}
@Override
public String toString() {
return "SingularityRequestHistory{" +
"createdAt=" + createdAt +
", user=" + user +
", eventType=" + eventType +
", request=" + request +
", message=" + message +
'}';
}
}