package com.hubspot.singularity; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.Optional; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ListMultimap; public class SingularityDeployStatistics { private final String requestId; private final String deployId; private final int numTasks; private final int numSuccess; private final int numFailures; private final int numSequentialRetries; private final ListMultimap<Integer, Long> instanceSequentialFailureTimestamps; private final Optional<Long> lastFinishAt; private final Optional<ExtendedTaskState> lastTaskState; private final Optional<Long> averageRuntimeMillis; @JsonCreator public SingularityDeployStatistics(@JsonProperty("requestId") String requestId, @JsonProperty("deployId") String deployId, @JsonProperty("numSuccess") int numSuccess, @JsonProperty("numFailures") int numFailures, @JsonProperty("numSequentialRetries") int numSequentialRetries, @JsonProperty("lastFinishAt") Optional<Long> lastFinishAt, @JsonProperty("lastTaskState") Optional<ExtendedTaskState> lastTaskState, @JsonProperty("instanceSequentialFailureTimestamps") ListMultimap<Integer, Long> instanceSequentialFailureTimestamps, @JsonProperty("numTasks") int numTasks, @JsonProperty("averageRuntimeMillis") Optional<Long> averageRuntimeMillis) { this.requestId = requestId; this.deployId = deployId; this.numSuccess = numSuccess; this.numFailures = numFailures; this.lastFinishAt = lastFinishAt; this.lastTaskState = lastTaskState; this.numSequentialRetries = numSequentialRetries; this.numTasks = numTasks; this.averageRuntimeMillis = averageRuntimeMillis; this.instanceSequentialFailureTimestamps = instanceSequentialFailureTimestamps == null ? ImmutableListMultimap.<Integer, Long> of() : ImmutableListMultimap.copyOf(instanceSequentialFailureTimestamps); } public SingularityDeployStatisticsBuilder toBuilder() { return new SingularityDeployStatisticsBuilder(requestId, deployId) .setLastFinishAt(lastFinishAt) .setLastTaskState(lastTaskState) .setNumSequentialRetries(numSequentialRetries) .setNumFailures(numFailures) .setNumSuccess(numSuccess) .setNumTasks(numTasks) .setAverageRuntimeMillis(averageRuntimeMillis) .setInstanceSequentialFailureTimestamps(ArrayListMultimap.create(instanceSequentialFailureTimestamps)); } public int getNumTasks() { return numTasks; } public Optional<Long> getAverageRuntimeMillis() { return averageRuntimeMillis; } public String getRequestId() { return requestId; } public String getDeployId() { return deployId; } public int getNumSuccess() { return numSuccess; } public int getNumFailures() { return numFailures; } public Optional<Long> getLastFinishAt() { return lastFinishAt; } public Optional<ExtendedTaskState> getLastTaskState() { return lastTaskState; } public int getNumSequentialRetries() { return numSequentialRetries; } public ListMultimap<Integer, Long> getInstanceSequentialFailureTimestamps() { return instanceSequentialFailureTimestamps; } @Override public String toString() { return "SingularityDeployStatistics{" + "requestId='" + requestId + '\'' + ", deployId='" + deployId + '\'' + ", numTasks=" + numTasks + ", numSuccess=" + numSuccess + ", numFailures=" + numFailures + ", numSequentialRetries=" + numSequentialRetries + ", instanceSequentialFailureTimestamps=" + instanceSequentialFailureTimestamps + ", lastFinishAt=" + lastFinishAt + ", lastTaskState=" + lastTaskState + ", averageRuntimeMillis=" + averageRuntimeMillis + '}'; } }