package com.hubspot.singularity; import java.util.Collections; import java.util.List; import java.util.Objects; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.Optional; import com.google.common.collect.ComparisonChain; public class SingularityTaskIdHistory implements Comparable<SingularityTaskIdHistory> { private final SingularityTaskId taskId; private final long updatedAt; private final Optional<ExtendedTaskState> lastTaskState; private final Optional<String> runId; public static SingularityTaskIdHistory fromTaskIdAndTaskAndUpdates(SingularityTaskId taskId, SingularityTask task, List<SingularityTaskHistoryUpdate> updates) { ExtendedTaskState lastTaskState = null; long updatedAt = taskId.getStartedAt(); if (updates != null && !updates.isEmpty()) { SingularityTaskHistoryUpdate lastUpdate = Collections.max(updates); lastTaskState = lastUpdate.getTaskState(); updatedAt = lastUpdate.getTimestamp(); } return new SingularityTaskIdHistory(taskId, updatedAt, Optional.fromNullable(lastTaskState), task.getTaskRequest().getPendingTask().getRunId()); } @JsonCreator public SingularityTaskIdHistory(@JsonProperty("taskId") SingularityTaskId taskId, @JsonProperty("updatedAt") long updatedAt, @JsonProperty("lastStatus") Optional<ExtendedTaskState> lastTaskState, @JsonProperty("runId") Optional<String> runId) { this.taskId = taskId; this.updatedAt = updatedAt; this.lastTaskState = lastTaskState; this.runId = runId; } @Override public int compareTo(SingularityTaskIdHistory o) { return ComparisonChain.start() .compare(o.getUpdatedAt(), updatedAt) .compare(taskId.getId(), o.getTaskId().getId()) .result(); } public SingularityTaskId getTaskId() { return taskId; } public Optional<ExtendedTaskState> getLastTaskState() { return lastTaskState; } public long getUpdatedAt() { return updatedAt; } public Optional<String> getRunId() { return runId; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } SingularityTaskIdHistory that = (SingularityTaskIdHistory) o; return updatedAt == that.updatedAt && Objects.equals(taskId, that.taskId) && Objects.equals(lastTaskState, that.lastTaskState) && Objects.equals(runId, that.runId); } @Override public int hashCode() { return Objects.hash(taskId, updatedAt, lastTaskState, runId); } @Override public String toString() { return "SingularityTaskIdHistory{" + "taskId=" + taskId + ", updatedAt=" + updatedAt + ", lastTaskState=" + lastTaskState + ", runId=" + runId + '}'; } }