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;
import com.hubspot.mesos.JavaUtils;
public class SingularityTaskHealthcheckResult extends SingularityTaskIdHolder implements Comparable<SingularityTaskHealthcheckResult> {
private final Optional<Integer> statusCode;
private final Optional<Long> durationMillis;
private final Optional<String> responseBody;
private final Optional<String> errorMessage;
private final boolean startup;
private final long timestamp;
@JsonCreator
public SingularityTaskHealthcheckResult(@JsonProperty("statusCode") Optional<Integer> statusCode, @JsonProperty("duration") Optional<Long> durationMillis, @JsonProperty("timestamp") long timestamp,
@JsonProperty("responseBody") Optional<String> responseBody, @JsonProperty("errorMessage") Optional<String> errorMessage, @JsonProperty("taskId") SingularityTaskId taskId, @JsonProperty("startup") Optional<Boolean> startup) {
super(taskId);
this.statusCode = statusCode;
this.errorMessage = errorMessage;
this.durationMillis = durationMillis;
this.timestamp = timestamp;
this.responseBody = responseBody;
this.startup = startup.or(false);
}
@Override
public int compareTo(SingularityTaskHealthcheckResult o) {
return ComparisonChain.start()
.compare(timestamp, o.getTimestamp())
.compare(o.getTaskId().getId(), getTaskId().getId())
.result();
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
SingularityTaskHealthcheckResult that = (SingularityTaskHealthcheckResult) o;
return startup == that.startup &&
timestamp == that.timestamp &&
Objects.equals(statusCode, that.statusCode) &&
Objects.equals(durationMillis, that.durationMillis) &&
Objects.equals(responseBody, that.responseBody) &&
Objects.equals(errorMessage, that.errorMessage);
}
@Override
public int hashCode() {
return Objects.hash(statusCode, durationMillis, responseBody, errorMessage, startup, timestamp);
}
public Optional<Integer> getStatusCode() {
return statusCode;
}
public Optional<Long> getDurationMillis() {
return durationMillis;
}
public Optional<String> getErrorMessage() {
return errorMessage;
}
public long getTimestamp() {
return timestamp;
}
public Optional<String> getResponseBody() {
return responseBody;
}
public boolean isStartup() {
return startup;
}
@JsonIgnore
public boolean isFailed() {
return getErrorMessage().isPresent() || (getStatusCode().isPresent() && !JavaUtils.isHttpSuccess(getStatusCode().get()));
}
@Override
public String toString() {
return "SingularityTaskHealthcheckResult{" +
"statusCode=" + statusCode +
", durationMillis=" + durationMillis +
", responseBody=" + responseBody +
", errorMessage=" + errorMessage +
", startup=" + startup +
", timestamp=" + timestamp +
"} " + super.toString();
}
}