package com.hubspot.singularity; import java.util.List; import org.apache.mesos.Protos.Offer; import org.apache.mesos.Protos.TaskInfo; 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.hubspot.mesos.MesosUtils; import com.wordnik.swagger.annotations.ApiModelProperty; public class SingularityTask extends SingularityTaskIdHolder { private final SingularityTaskRequest taskRequest; private final Offer offer; private final TaskInfo mesosTask; private final Optional<String> rackId; @JsonCreator public SingularityTask(@JsonProperty("taskRequest") SingularityTaskRequest taskRequest, @JsonProperty("taskId") SingularityTaskId taskId, @JsonProperty("offer") Offer offer, @JsonProperty("mesosTask") TaskInfo task, @JsonProperty("rackId") Optional<String> rackId) { super(taskId); this.taskRequest = taskRequest; this.offer = offer; this.mesosTask = task; this.rackId = rackId; } public SingularityTaskRequest getTaskRequest() { return taskRequest; } @ApiModelProperty(hidden=true) public Offer getOffer() { return offer; } @ApiModelProperty(hidden=true) public TaskInfo getMesosTask() { return mesosTask; } public Optional<String> getRackId() { return rackId; } @JsonIgnore public Optional<Long> getPortByIndex(int index) { List<Long> ports = MesosUtils.getAllPorts(mesosTask.getResourcesList()); if (index >= ports.size() || index < 0) { return Optional.absent(); } else { return Optional.of(ports.get(index)); } } @Override public String toString() { return "SingularityTask{" + "taskRequest=" + taskRequest + ", offer=" + MesosUtils.formatForLogging(offer) + ", mesosTask=" + MesosUtils.formatForLogging(mesosTask) + ", rackId=" + rackId + '}'; } }