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

com.hubspot.singularity.SingularityTaskIdHistory Maven / Gradle / Ivy

The newest version!
package com.hubspot.singularity;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.Objects;
import com.google.common.base.Optional;
import com.google.common.collect.ComparisonChain;

public class SingularityTaskIdHistory implements Comparable {

  private final SingularityTaskId taskId;
  private final long updatedAt;
  private final Optional lastTaskState;
  private final Optional runId;

  public static SingularityTaskIdHistory fromTaskIdAndTaskAndUpdates(SingularityTaskId taskId, SingularityTask task, List updates) {
    ExtendedTaskState lastTaskState = null;
    long updatedAt = taskId.getStartedAt();

    if (updates != null && !updates.isEmpty()) {
      SingularityTaskHistoryUpdate lastUpdate = updates.get(0);
      for (SingularityTaskHistoryUpdate update : updates.subList(1, updates.size())) {
        if (update.getTimestamp() > lastUpdate.getTimestamp()) {
          lastUpdate = update;
        }
      }
      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 lastTaskState, @JsonProperty("runId") Optional 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();
  }

  @Override
  public int hashCode() {
    return Objects.hashCode(taskId, updatedAt, lastTaskState, runId);
  }

  @Override
  public boolean equals(Object other) {
      if (other == this) {
          return true;
      }
      if (other == null || other.getClass() != this.getClass()) {
          return false;
      }

      SingularityTaskIdHistory that = (SingularityTaskIdHistory) other;
      return Objects.equal(this.taskId , that.taskId)
              && Objects.equal(this.updatedAt , that.updatedAt)
              && Objects.equal(this.lastTaskState , that.lastTaskState)
              && Objects.equal(this.runId, that.runId);
  }

  public SingularityTaskId getTaskId() {
    return taskId;
  }

  public Optional getLastTaskState() {
    return lastTaskState;
  }

  public long getUpdatedAt() {
    return updatedAt;
  }

  public Optional getRunId() {
    return runId;
  }

  @Override
  public String toString() {
    return "SingularityTaskIdHistory [taskId=" + taskId + ", updatedAt=" + updatedAt + ", lastTaskState=" + lastTaskState + ", runId=" + runId + "]";
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy